数据更新转换的问题
在一个表里,有个身份证字段,出生年月字段, 我现在通过前一个字段提取后一个字段所需的数据,前面是字符型,后面是日期型,我在更新的时候加上了‘ -’作为年月日的连接,如: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)