我有一个平面文件,我将其作为字符数据导入SQL Server 2005登台表。
我需要在将生日字段复制到最终目标表时将生日字段转换为日期时间格式。我这样做是使用以下内容:
BIRTHDAY = case when isdate(DOB)=1 then convert(datetime, '19'+right(DOB, 2)+left(DOB, 2)+substring(DOB,3,2)) else null end
问题是32k +文件中只有100多个生日被识别为日期。
我看不出日期和不日期之间的区别。我在下面提供了一个样本。
good date bad date
41129 100465
10531 122467
10429 20252
81030 62661
31231 20959
11028 91965
80928 60665
答案 0 :(得分:0)
看起来原始数据是MMDDYY,但月份不是0填充。
在此假设的基础上,您可以解析下面的日期部分并重建日期时间:
declare @raw table (dob varchar(100));
insert into @raw
select '41129' union all
select '10531' union all
select '10429' union all
select '81030' union all
select '31231' union all
select '11028' union all
select '80928' union all
select '100465' union all
select '122467' union all
select '20252' union all
select '62661' union all
select '20959' union all
select '91965' union all
select '60665'
select *,
[asDate] = dateadd(day, dd - 1, dateadd(month, mm - 1, dateadd(year, ('19' + yy)-1900, 0)))
from ( select dob,
substring(right('0' + dob, 6), 1, 2),
substring(right('0' + dob, 6), 3, 2),
substring(right('0' + dob, 6), 5, 2)
from @raw
) as stage (string, mm, dd, yy);