MSSQL句柄/拆分未知日期字符串格式



服务器类型:MSSQL 2014

我的字符串:varchar'2/05/2017 7:54:51 pm'

我需要将其转换为任何受支持的DateTime格式(或最好直接直接转换为时代(。它需要处理空和"(空白(行。

我花了几个小时来拖网答案和Google无济于事。令人沮丧的位是存储的格式仅与日期格式略有不同。

我尝试了诸如;

之类的事情
FORMAT(CONVERT(DATETIME, '2/05/2017 7:54:51 PM'), 'dd/MM/yyyy hh:mm:ss')
CONVERT(DATETIME, '2/05/2017 7:54:51 PM',22)
CONVERT(DATETIME, '2/05/2017 7:54:51 PM',131)

/* SQL错误(241(:转换日期和/或从字符串转换时间时失败。*/

/* SQL错误(242(:将VARCHAR数据类型转换为DateTime数据类型导致了偏僻的值。*/

以及一束带有子字符串/charindex等的陷入困境,等等,尝试单独处理每个部分,无济于事。

SELECT CONVERT(DATETIME, '2/05/2017 7:54:51 PM',131)
SELECT CONVERT(DATETIME, '2/05/2017 7:54:51 PM',22) -- wrong date time format

22是错误的输入格式请参阅https://learn.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

找到了我的解决方案。由于误解了"转换"

,它弄错了

解决方案:

DECLARE @wrongdate DATETIME = CONVERT(VARCHAR, TRY_PARSE('2/05/2017 7:54:51 PM' AS DATETIME USING 'en-gb'), 121);
SELECT convert(bigint, datediff(ss,  '01-01-1970 00:00:00', @wrongdate));

,如果您打算对选择的结果作用,则需要操纵这一点,因此,请将选择更改为;

(CONVERT(bigint, datediff(ss,  '01-01-1970 00:00:00', CONVERT(VARCHAR, TRY_PARSE(CAST([MyColumn].Object AS VARCHAR) AS DATETIME USING 'en-gb'), 121)))) AS [my_column]

最新更新