0

在数据库中数据是脏的,“日期”是数据库保存为字符串并以不同的格式保存。

我想清理数据库并将其放入一个新数据库中,其中日期为 DATE sql 格式。

但问题是脏日期中的日期格式不同,例如

14 sept 2012
14 SEPTEMBER 2012
14th sept 2012
14th sept 12
14 sept 12
etc

如何将每个日期转换为单个 sql DATE 格式?

4

2 回答 2

3

假设所有date are later than or year 2000and two digits for dateat least 3 letters for month试试这个。SQL小提琴在这里

SELECT CONVERT (DATE, '20' + right(mydate,2)+
                      CASE substring(mydate,charindex(' ', mydate,0)+ 1,3)
                           when 'jan' then '01'
                           when 'feb' then '02'
                           when 'mar' then '03'
                           when 'apr' then '04'
                           when 'may' then '05'
                           when 'jun' then '06'
                           when 'jul' then '07'
                           when 'aug' then '08'
                           when 'sep' then '09'
                           when 'oct' then '10'
                           when 'nov' then '11'
                           when 'dec' then '12'
                           else 'error' end +
                      left(mydate,2))
FROM t

注意:解决方案基于给定的数据样本

于 2012-12-11T12:25:15.397 回答
2

尝试这个:

create table tmp_date(col1 varchar(100));

insert into tmp_date
VALUES('14 sept 2012'),('14 SEPTEMBER 2012'),('14th sept 2012'),('14th sept 12'),('14 sept 12')

select convert(datetime,left(col1,2)+'-'+lower(SUBSTRING(col1,CHARINDEX(' ',col1,1)+1,3))+'-'+ltrim(rtrim(reverse(LEFT(REVERSE(col1),CHARINDEX(' ',REVERSE(col1),1)))))) from tmp_date
于 2012-12-11T12:08:38.597 回答