我将以下字符串转换为以下指定格式。
给出字符串:
2019-07-06 8/7/2019 1:00:00 PMto2019-07-07 8/7/2019 4:00:00 AM
2019-07-06 8/7/2019 4:01:00 AMto2019-07-06 8/7/2019 10:00:00 PM
2019-07-06 1:00:00to2019-07-06 8/7/2019 4:00:00 AM
2019-07-06 8/7/2019 4:01:00 AMto2019-07-06 10:00:00 PM
对于上述给定的字符串,我想转换为以下格式:
预期结果:
2019-07-06 13:00:00to2019-07-06 4:00:00
2019-07-06 4:01:00to2019-07-06 22:00:00
2019-07-06 1:00:00to2019-07-06 4:00:00
2019-07-06 4:01:00to2019-07-06 22:00:00
我的尝试:
DECLARE @D1 VARCHAR(MAX) = '2019-07-06 8/7/2019 4:01:00 AMto2019-07-07 8/7/2019 10:00:00 PM'
SELECT CASE WHEN LEN(SUBSTRING(@D1,CHARINDEX(' ',@D1)+1,CHARINDEX('M',@D1)-CHARINDEX(' ',@D1))) >= 19
THEN REPLACE(@D1,SUBSTRING(@D1,CHARINDEX(' ',@D1)+1,CHARINDEX('t',@D1)-CHARINDEX(' ',@D1)-1),CAST(SUBSTRING(@D1,CHARINDEX(' ',@D1)+1,CHARINDEX('t',@D1)-CHARINDEX(' ',@D1)-1) AS TIME(0)))
ELSE @D1
END DateTime_result
无法在2019年8月7日第二次出现该问题。
答案 0 :(得分:0)
尝试以下脚本。
DECLARE @D VARCHAR(MAX) = '2019-07-06 8/7/2019 1:00:00 PMto2019-07-07 8/7/2019 4:00:00 AM'
select cast(CONVERT(DATETIME2,(replace(substring(@D,1,CHARINDEX('to',@D,1)-1),' 8/7/2019 ',' ')), 0) as varchar(22)) + ' to ' + cast(CONVERT(DATETIME2,(replace(substring(@D,CHARINDEX('to',@D,1)+2,len(@D)),' 8/7/2019 ',' ')), 0) as varchar(22))
答案 1 :(得分:0)
DECLARE @D VARCHAR(MAX) = '2019-07-06 8/7/2019 1:00:00 PMto2019-07-07 8/7/2019 4:00:00 AM'
select replace(@d,substring(@d,charindex('/',@D)-1,charindex('/',@D)-4),'')