0

Perl プログラムによって生成された日時値がありますが、その形式は数値です。のように見えます358153851

値は MS SQL Server データベースに保存されます。日時形式に変換したいと思います。

ここでの問題は、私が Perl 言語に詳しくないことと、Perl 変換スクリプトを SSIS/Tsql に統合する方法がわからないことです。

何かご意見は?

ありがとう

4

3 に答える 3

4

@mceda が言ったように、これがエポック時間である場合、Perl 経由で MS SQL タイムスタンプを取得することもできます。

use strict;
use warnings;
use DateTime::Format::Epoch;
use DateTime::Format::MSSQL;

my $formatter = DateTime::Format::Epoch->new(
        epoch          => $dt,
        unit           => 'seconds',
        type           => 'int',
        skip_leap_secondss => 1,
        start_at       => 0,
        local_epoch    => undef,
    );
my $dt = $formatter->parse_datetime(358153851);
print DateTime::Format::MSSQL->format_datetime($dt);

これにより、エポック タイムからDateTimeオブジェクトが作成され、MS SQL 形式の日時文字列に変換されます。

于 2013-01-16T15:57:10.870 に答える
1

あなたの時刻が実際に UNIX 時間である場合、それは単に 1970 年 1 月 1 日からの秒数を表しています。

DECLARE @UNIX_TIME INT = 358153851;
DECLARE @DATE DATETIME;

SELECT  @DATE=DATEADD(SECOND, @UNIX_TIME, '19700101');

質問の数字の換算時間は1981-05-08 07:10:51.000です。

于 2013-01-16T08:10:22.423 に答える
0

これを試して

use strict;
use warnings;

my $t = time();

print (sec_to_sql_str($t));

sub sec_to_sql_str
{
    my $in = shift;

    my ($sec,$min,$hour,$mday,$mon,$year,undef,undef,undef) = localtime($in);
    return sprintf ("%d-%02d-%02d %02d:%02d:%02d", 1900 + $year, 1 + $mon, $mday, $hour, $min, $sec);
}
于 2013-01-16T08:21:47.657 に答える