将 14(十四)位 bigint 数据类型转换为日期时间数据类型



我有这样的情况:
我有一个 14 位(不是 13 位(的 bigint 数据类型列。
这需要转换为日期时间数据类型。

例如,20160418074908(bigint(必须转换为2016-04-18 07:49:08.000(日期时间(。

我一直在浏览很多论坛,但无济于事。

有什么建议吗?

一种方法是投射到char(14),然后使用left获取日期部分,right获取时间部分。您可以按原样投射到 datetime 的日期部分,因为它是 yyyyMMdd ,但您必须在第 5 位和第 3 位添加:的时间部分 - 这就是stuff的作用:

DECLARE @D as bigint = 20160418074908
SELECT CAST(LEFT(CAST(@D as char(14)), 8) AS DATETIME) +
       CAST(STUFF(STUFF(RIGHT(CAST(@D as char(14)), 6), 5, 0, ':'), 3, 0, ':') AS DATETIME)

结果:

2016-04-18 07:49:08

与格式方法相比,这种方法的优点是速度。
Format功能以性能不佳而闻名。

您可以在rextester上看到现场演示。

您需要将它们转换为日期和时间分开的字符串值,并使用format()函数将bigint时间值格式化为字符串

select 
       cast(cast(cast(left(cast(<date> as varchar), 8) as date) as varchar) + ' ' + 
       format(cast(right(cast(<date> as varchar), 6) as int), 
                                  '##:##:##') as datetime) datetimes
from table

这是@PanagiotisKanavos的简短版本帮助

select cast(left(<date>,8) as datetime) +
       cast(format(cast(right(<date>, 6) as int),'##:##:##') as datetime) datetimes
from table

结果:

datetimes
2016-04-18 07:49:08.000

感谢您提供的帮助:

我在另一个论坛上找到了这个(有点类似于 Zohar 的(:

声明@DateValue varchar(50(=20160418074908

选择convert(datetime,stuff(stuff(stuff(@DateValue, 9, 0, ' '(, 12, 0, ':'(, 15, 0, ':'(( AS ConvertedDate

最新更新