我有这样的情况: 我有一个14位(不是13)bigint数据类型列。 这需要转换为datetime数据类型。
例如,20160418074908
(bigint)必须转换为2016-04-18 07:49:08.000
(datetime)。
我一直在经历很多论坛,但无济于事。
有什么建议?
一种方法是施放到char(14)
,然后使用left
获取日期部分,并使用right
获取时间部分。您可以按日期部分投射到日期时间,因为它是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
函数是known for poor performance。
你需要将它们作为字符串值转换为日期和时间分开并使用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
select convert(datetime,stuff(stuff(stuff(@DateValue,9,0,''),12,0,':'),15,0,':'))AS ConvertedDate