将14(十四)位bigint数据类型转换为datetime数据类型

时间:2018-03-05 11:11:51

标签: sql sql-server tsql sql-server-2016

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

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

我一直在经历很多论坛,但无济于事。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

你需要施放它们作为日期和时间的字符串值分开&使用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

答案 1 :(得分:0)

执行此操作的一种方法是转换为char(14),然后使用left获取日期部分,使用right获取时间部分。您可以按原样投放到日期时间的日期部分,因为它是yyyyMMdd,但是您必须在第5和第3位添加:的时间部分 - 这就是stuff所做的事情:< / p>

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函数为known for poor performance

You can see a live demo on rextester.

答案 2 :(得分:0)

感谢您提供的帮助:

我在另一个论坛中找到了这个(有点类似于Zohar&#39;)

声明@DateValue varchar(50)= 20160418074908

选择 转换(日期时间,东西(东西(@DateValue,9,0,&#39;&#39;),12,0,&#39;:&#39;),15,0,&#39; :&#39;))AS ConvertedDate