日期:2014-05-18  浏览次数:20573 次

数据更新转换的问题
在一个表里,有个身份证字段,出生年月字段,   我现在通过前一个字段提取后一个字段所需的数据,前面是字符型,后面是日期型,我在更新的时候加上了‘   -’作为年月日的连接,如:340403195503031434   更新另一字段为1955-03-03
结果出现:从   char   数据类型到   datetime   数据类型的转换导致   datetime   值越界。
    感觉程序写的对的啊,是怎么回事啊

------解决方案--------------------
declare @a table(UserID nvarchar(18),Birthday datetime)
insert @a(UserID) select '340403195503031434 '
insert @a(UserID) select '340403198003031434 '
insert @a(UserID) select '340403880102101 '

select * from @a
update @a
set Birthday = case when len(UserID) = 18 then convert(char(10),substring(UserID,7,8),120)
else convert(char(10), '19 ' + substring(UserID,7,6),120) end

select * from @a
------解决方案--------------------
declare @s as varchar(30)
declare @tmp as varchar(20)
----只写了身份证为18位的,你自己加下条件判断吧
set @s = '340403195503031434 '
set @tmp =substring(@s,7,8)
select cast(left(@tmp , 4) + '- ' + substring(@tmp,5,2) + '- ' + substring(@tmp,7,2) as datetime)