请教,数据库里有一个时间字段的数据是 varchar类型的,
数据格式为20151016035000,
由于该时间为世界时,要小时位再加上8才是北京时,
如何操作才能使最终显示结果如 “2011-05-16 10:57:47”所示?
------解决思路----------------------
declare @dt varchar(20)
set @dt='20151016035000'
select DATEADD(HOUR,8, convert(datetime,SUBSTRING(@dt,1,8)+' '+substring(@dt,9,2)+':'+substring(@dt,11,2)+':'+substring(@dt,13,2)))
------解决思路----------------------
你就把变量替换成字符串的时间字段就可以,参考如下:
WITH A(SJ) AS(
SELECT '20151016035001' UNION ALL
SELECT '20151016035002' UNION ALL
SELECT '20151016035003' UNION ALL
SELECT '20151016035004'
)
SELECT
DATEADD(hh,8,CAST(CAST(SUBSTRING(SJ,1,8) AS DATE) AS NVARCHAR(10)) + ' ' + SUBSTRING(SJ,9,2)+':'+SUBSTRING(SJ,11,2)+':'+SUBSTRING(SJ,13,2))
FROM A
------解决思路----------------------
WITH tb01(dt) AS(
SELECT '20151016035001' UNION ALL
SELECT '20151016045102' UNION ALL
SELECT '20151016055203' UNION ALL
SELECT '20151016065304'
)
SELECT CONVERT(DATETIME, STUFF(STUFF(STUFF(dt, 9, 0, ' '), 12, 0, ':'), 15, 0, ':'), 120) as [字符串转时间],
DATEADD(HOUR, 8, CONVERT(DATETIME, STUFF(STUFF(STUFF(dt, 9, 0, ' '), 12, 0, ':'), 15, 0, ':'), 120)) as [时间+8小时]
from tb01