清理SQL中的脏数据

时间:2012-12-11 10:57:55

标签: sql sql-server date

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

我想清理数据库并将其放在新数据库中,其中日期将采用DATE sql格式。

但问题是脏日期的日期是不同的格式 e.g。

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

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

2 个答案:

答案 0 :(得分:3)

假设所有date are later than or year 2000two digits for date以及at least 3 letters for month,请尝试此操作。 SQL Fiddle here

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

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

答案 1 :(得分: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