【问题标题】:Converting bigint to datetime in sqlserver在sql server中将bigint转换为日期时间
【发布时间】:2021-05-16 01:56:24
【问题描述】:

我正在尝试将我的 bigint 转换为日期和时间。我已使用以下链接作为指导,但它没有按预期工作,因为根据我对这个解决方案的理解,它是基于毫秒的。

Convert bigint to datetime

我有以下编码并尝试了以下方法:


declare @starttime as bigint;
set @starttime = '2021021209295600000';

Select dateadd(HOUR, (@starttime / 100000) % (24 * 60 * 60),
               dateadd(day, (@starttime / 100000) / (24 * 60 * 60), '1970-01-01'))

提示如下错误:

The data types time and datetime are incompatible in the add operator. 

正如前面提到的,我已经尝试了上述解决方案,但是给出了以下输出,这是不正确的select dateadd(s, convert(bigint, @starttime) / 1000, convert(datetime, '1-1-1970 00:00:00'))

有人可以帮帮我吗? 预期值2021-02-12 09:29:56

【问题讨论】:

    标签: sql-server datetime type-conversion bigint


    【解决方案1】:

    这不是很漂亮,但我会将 CONVERT 它添加到 varchar,注入一些需要的字符,然后将 CONVERT 注入 datetime(因为您有 5 个小数位,我假设它是实际上是一个datetime2(5)):

    DECLARE @starttime as bigint;
    SET @starttime = 2021021209295600000;
    
    SELECT CONVERT(datetime2(5),STUFF(STUFF(STUFF(STUFF(STUFF(STUFF(CONVERT(varchar(20),@starttime),15,0,'.'),13,0,':'),11,0,':'),9,0,'T'),7,0,'-'),5,0,'-'));
    

    【讨论】:

    • 谢谢。我什至尝试过类似的方法,但提示错误 select convert(datetime, cast(@starttime/100000 as varchar(14)), 101) ,但是你的工作
    • 因为 '20210212092956' 也不是有效值,@AnnaliseAzzopardi 没有任何分隔符(例如 -:)。这就是所有STUFF 函数正在做的事情;将字符注入正确的位置。
    • 是否可以只选择日期而不是日期和时间。我尝试了以下方法,但出现错误:,CONVERT(date,STUFF(STUFF(CONVERT(char(8),@starttime),7,0,'-'),5,0,'-')) as DateOnly
    • 使用date, @AnnaliseAzzopardi。
    猜你喜欢
    • 2019-10-03
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2013-10-30
    • 2019-03-07
    • 1970-01-01
    相关资源
    最近更新 更多