mssql2008express中
update baseinfo set chushengriqi=
convert(datetime,
''''+
+substring(CONVERT(char(4),shenfenzhenghao),7,4)+'-'
+substring(CONVERT(char(2),shenfenzhenghao),11,2)+'-'
+substring(CONVERT(char(2),shenfenzhenghao),13,2)+''''
)
where ShenFenZhengHao is not null
and len(ShenFenZhengHao)=18
老提示:
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.为什么呢?或者还有什么更简单的办法?
update baseinfo set chushengriqi=
convert(datetime,
''''+
+substring(CONVERT(char(4),shenfenzhenghao),7,4)+'-'
+substring(CONVERT(char(2),shenfenzhenghao),11,2)+'-'
+substring(CONVERT(char(2),shenfenzhenghao),13,2)+''''
)
where ShenFenZhengHao is not null
and len(ShenFenZhengHao)=18
老提示:
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.为什么呢?或者还有什么更简单的办法?
''''+
+substring(CONVERT(char(4),shenfenzhenghao),7,4)+'-'
+substring(CONVERT(char(2),shenfenzhenghao),11,2)+'-'
+substring(CONVERT(char(2),shenfenzhenghao),13,2)+''''
提示:Msg 242, Level 16, State 3, Line 1
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated.
意思是日期超范围了?
set chushengriqi = substring(shenfenzhenghao,7,4) + '-'+ substring(shenfenzhenghao,11,2) + '-'+ substring(shenfenzhenghao,13,2)
where where ShenFenZhengHao is not null
and len(ShenFenZhengHao)=18
and isdate(substring(shenfenzhenghao,7,4) + '-'+ substring(shenfenzhenghao,11,2) + '-'+ substring(shenfenzhenghao,13,2)) = 1
update baseinfo set chushengriqi=substring(ShenFenZhengHao,7,8)where ShenFenZhengHao is not null
and len(ShenFenZhengHao)=18
and SUBSTRING(shenfenzhenghao,7,4)>='1900' and SUBSTRING(shenfenzhenghao,7,2)<='2050'
and SUBSTRING(shenfenzhenghao,11,2)>='01' and SUBSTRING(shenfenzhenghao,11,2)<='12'
and SUBSTRING(shenfenzhenghao,13,2)>='01' and SUBSTRING(shenfenzhenghao,13,2)<='31'
set @id='110104198003110516'
select convert(datetime,substring(@id,7,8))
/*-----------------------
1980-03-11 00:00:00.000(1 行受影响)*/
declare @id varchar(18)
set @id='110104198003110516'
select isdate(substring(@id,7,8))
/*
-----------
1(1 行受影响)*/