在 T-SQL 中将蹩脚的文本日期字符串转换为实际日期时间的更好方法



我在以下格式的文本文件中收到日期,但需要将其转换为 datetime2 字段。

15-JAN-18 04.19.52.597000000 PM

我希望使用比这更容易的东西。 格式会很明显,但我不能使用它来转到日期时间,只是从日期时间开始。

从技术上讲,我可以使用日期时间部分,但是我必须处理 AM/PM 上的案例陈述,转换为 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

来自 CTE

也许一种方法

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

最新更新