Perl プログラムによって生成された日時値がありますが、その形式は数値です。のように見えます358153851
。
値は MS SQL Server データベースに保存されます。日時形式に変換したいと思います。
ここでの問題は、私が Perl 言語に詳しくないことと、Perl 変換スクリプトを SSIS/Tsql に統合する方法がわからないことです。
何かご意見は?
ありがとう
Perl プログラムによって生成された日時値がありますが、その形式は数値です。のように見えます358153851
。
値は MS SQL Server データベースに保存されます。日時形式に変換したいと思います。
ここでの問題は、私が Perl 言語に詳しくないことと、Perl 変換スクリプトを SSIS/Tsql に統合する方法がわからないことです。
何かご意見は?
ありがとう
@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 形式の日時文字列に変換されます。
あなたの時刻が実際に 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
です。
これを試して
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);
}