【问题标题】:Converting Perl number to MS SQL Server datetime将 Perl 数字转换为 MS SQL Server 日期时间
【发布时间】:2013-01-16 06:53:00
【问题描述】:

我有一个 Perl 程序生成的日期时间值,但它的格式是一个数字。 看起来像358153851

这些值保存在 MS SQL Server 数据库中。我想把它转换成日期时间格式。

这里的问题是我对Perl语言不熟悉,不知道如何将Perl转换脚本与SSIS/Tsql集成。

有什么想法吗?

谢谢

【问题讨论】:

  • 它几乎肯定是一个 unix 纪元格式的时间戳,你的服务器肯定有能够处理它的功能。

标签: sql-server perl date datetime ssis


【解决方案1】:

就像@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 格式的日期时间字符串。

【讨论】:

    【解决方案2】:

    如果您的时间确实是 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

    【讨论】:

      【解决方案3】:

      试试这个

      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);
      }
      

      【讨论】:

      • 我没有考虑过在 Perl 中的转换 :) 让我们看看他对哪个方向感兴趣。
      猜你喜欢
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多