当前位置: 代码迷 >> Sql Server >> varchar类型的时间怎么加上8小时后再转换为类似“2011-05-16 10:57:47”的格式
  详细解决方案

varchar类型的时间怎么加上8小时后再转换为类似“2011-05-16 10:57:47”的格式

热度:325   发布时间:2016-04-24 08:49:16.0
varchar类型的时间如何加上8小时后再转换为类似“2011-05-16 10:57:47”的格式
请教,数据库里有一个时间字段的数据是 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
  相关解决方案