将带有文本的 varchar 日期转换为日期时间

Convert varchar date with text to datetime

我的 SQL 数据库中有一个包含时间戳的 varchar(255) 列。我需要将其转换为日期时间格式。但是我不确定哪个cast/convert是合适的。

格式如下:

DDD, DD MMM YYYY HH:MM:SS

数据示例:

Tue, 9 Sep 2014 07:24:25 +0000
Mon, 30 Jun 2014 20:18:19 -0530

秒(SS) 数字后的时区指示符可以忽略。

想要的结果:YYYY-MM-DD HH:MM:SS

使用substring提取不同的部分,因为一两位数的天,多取一个字符。 例如。年份部分:trim(substring(col from 12 for 5))

对其余项目执行类似操作。 月份需要额外的工作才能从月份名称中获取月份编号

case trim(substring(col from 8 for 4))
  when 'Jan' then '01'
  when 'Feb' then '02'
  ...
  when 'Dec' then '12'
end

连接不同的部分,不要忘记分隔破折号等

如果您的格式总是这样,您可以使用以下格式

Select convert(datetime, SUBSTRING(DateColumn, CharIndex(',', DateColumn) + 1, LEN(DateColumn) - (CharIndex(',', DateColumn) + 1 + CHARINDEX(':', REVERSE(DateColumn)) - 4))))

这是我的例子:

Declare @val varchar(40) = 'Tue, 9 Sep 2014 07:24:25 +0000'
Declare @val1 varchar(40) = 'Mon, 30 Jun 2014 20:18:19 -0530 (PST)'

Select convert(datetime, substring(@val, CharIndex(',', @val) + 1, Len(@val) - (CharIndex(',', @val) + 1 + CHARINDEX(':', REVERSE(@Val)) - 4))) 
Select convert(datetime, substring(@val1, CharIndex(',', @val1) + 1, Len(@val1) - (CharIndex(',', @val) + 1 + CHARINDEX(':', REVERSE(@Val1)) - 4)))