将不常见的 Datetime 字符串转换为 Datetime 类型

Convert uncommon Datetime string to type Datetime

我有一个日期时间字符串,但它不是最常见的格式之一。

20190316-000118619

是否有使用内置转换函数将其转换为类型 datetime 的优雅方法?

总的猜测,也许...

SELECT CONVERT(datetime2(3),STUFF(STUFF(STUFF(STUFF(STUFF(STUFF('20190316-000118619',9,1,'T'),16,0,'.'),14,0,':'),12,0,':'),7,0,'-'),5,0,'-'));

db<>fiddle

你可以使用这个:

DECLARE @s VARCHAR(MAX) = '20190316-000118619';

SELECT DATETIMEFROMPARTS(
                            SUBSTRING(@s, 1, 4),--Year
                            SUBSTRING(@s, 5, 2),--Month
                            SUBSTRING(@s, 7, 2),--Day
                            SUBSTRING(@s, CHARINDEX('-', @s) + 1, 2),--Hour
                            SUBSTRING(@s, CHARINDEX('-', @s) + 3, 2),--Minute
                            0,--Second
                            0--Milisecond
                        );