在数据库中数据是脏的,“日期”是数据库保存为字符串并以不同的格式保存。
我想清理数据库并将其放在新数据库中,其中日期将采用DATE sql格式。
但问题是脏日期的日期是不同的格式 e.g。
14 sept 2012
14 SEPTEMBER 2012
14th sept 2012
14th sept 12
14 sept 12
etc
如何以单个sql DATE格式转换每个日期?
答案 0 :(得分:3)
假设所有date are later than or year 2000
和two 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