将带有text的varchar日期转换为datetime

时间:2015-01-09 09:28:43

标签: sql sql-server date datetime casting

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

格式如下:

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

2 个答案:

答案 0 :(得分:0)

使用子字符串提取不同的部分,因为一个或两个数字天而需要一个额外的字符。 例如。年份: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

Concat你的不同部分,不要忘记分隔破折号等。

答案 1 :(得分:0)

如果您的格式总是看起来像您可以使用以下

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)))