我在文本文件中收到以下格式的日期,但需要将其转换为datetime2字段。
15-JAN-18 04.19.52.597000000 PM
我希望使用比这更容易的东西。格式显而易见,但我无法使用它来转发日期时间,仅限日期时间。
从技术上讲,我可以使用datetimefromparts,但是我必须处理AM / PM上的case语句,转换为int,将其填充回varchar等等。
有更好的方法吗?
DECLARE @blah VARCHAR(50) = '15-JAN-18 04.19.52.597000000 PM';
WITH cte AS
(
SELECT SUBSTRING(@blah,1,2) AS dd, SUBSTRING(@blah,4,3) AS mon, SUBSTRING(@blah,8,2) AS yy,
SUBSTRING(@blah,11,2) AS hh, SUBSTRING(@blah,30,2) AS ampm, SUBSTRING(@blah,14,2) AS mm, SUBSTRING(@blah,17,2) AS ss, SUBSTRING(@blah, 20,9) AS ms, @blah AS raw
)
SELECT CONVERT(DATETIME2,dd + '-' + mon + '-' + yy + ' ' + hh + ':' + mm + ':' + ss + '.' + ms + ' ' + ampm), raw
FROM cte
答案 0 :(得分:2)
也许是一种方法
示例强>
Declare @S varchar(50)='15-JAN-18 04.19.52.597000000 PM'
Select try_convert(datetime2,replace(left(@S,18),'.',':')+right(@S,13))
<强>返回强>
2018-01-15 16:19:52.5970000