我有一个 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-01-01 开始的秒数。
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);
}