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-01-01 开始的秒数。

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 回答