【问题标题】:millisecond epoch conversion in Sybase ASESybase ASE 中的毫秒历元转换
【发布时间】:2021-01-14 14:29:07
【问题描述】:

我有一列毫秒格式的历元。 我需要将它们转换为另一列日期时间,包括毫秒精度。

我已经尝试了各种组合(使用强制转换、转换等):

select dateadd(ss, 1610309854301, '19700101')         

我不断得到:

Arithmetic overflow during explicit conversion of BIGINT value '1610309854301'

以前的帖子中有一些 cmets,但没有一个适用于 ASE。

需要得到 1610309854301:这等于另一列中的 this。 2021 年 1 月 10 日星期日 20:17:34.301

这可以在 ASE 16.1 上的 SQL 中完成吗?

谢谢!

【问题讨论】:

    标签: sap-ase


    【解决方案1】:

    运行一些快速测试,它看起来(对我来说)一些与日期相关的函数尚未更新为使用 bigint 数据类型(例如,dateadd() 的文档仅提到 int 值作为参数) .

    假设您有支持合同,我建议您与 SAP 建立一个案例,看看这是否是一个已知问题(以及是否计划/在未来的版本中提供修复),或者是否有首选的解决方法。


    一个简单的解决方法是将 bigint 值分成 2 个块 .../1000 => 秒数 ...%1000 => 毫秒数 ...然后粘贴回去期望的结果,例如:

    declare @ms     bigint,
            @newdt  datetime,         -- limited to 3 millisec precision
            @newdtb bigdatetime,      -- supports microsecs so not limited to mod(3 msec)
            @newdts varchar(30)       -- collect strings to convert into (big)datetime
    
    select  @ms     = 1610309854301
    select  @newdts = convert(varchar(30),dateadd(ss, @ms/1000, '19700101'),116) + '.' +
                      right('000'+convert(varchar(3),@ms % 1000),3 )
    select  @newdt  = convert(datetime,@newdts)
    select  @newdtb = convert(bigdatetime,@newdts)
    
    select @newdts, convert(varchar(30),@newdt,139), convert(varchar(30),@newdtb,139)
    go
    

    这会生成:

     ------------------------------ ------------------------------ ------------------------------
     Jan 10 2021 20:17:34.301       Jan 10 2021 20:17:34.300000    Jan 10 2021 20:17:34.301000
    

    注意事项

    • 第二个值 (@newdt) 表明 ASE'sdatetime 数据类型的限制(即 3 毫秒精度)
    • 以上测试在ASE 16.0 SP03 PL07

    【讨论】:

      【解决方案2】:

      不完美,但...

      dateadd(second , (number_of_millis / 1000), "01-01-1970")

      例如dateadd(秒, (1610309854301 / 1000), "01-01-1970")

      如果你使用秒,你会得到一个溢出错误。

      或者如果作为选择的一部分使用

      选择 dateadd(second , CONVERT(INT, (my_milli_second_column / 1000)), "01-01-1970")

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-07
        • 2013-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        相关资源
        最近更新 更多