在一个表里,有个身份证字段,出生年月字段, 我现在通过前一个字段提取后一个字段所需的数据,前面是字符型,后面是日期型,我在更新的时候加上了‘ -’作为年月日的连接,如:340403195503031434 更新另一字段为1955-03-03
结果出现:从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
感觉程序写的对的啊,是怎么回事啊update a set A0111 =
case Len(Rtrim(A0177) )
when 15 then '19' + SubString(A0177,7,2) + '-' + SubString(A0177,9,2) + '-' + SubString(A0177,11,2)
when 18 then SubString(A0177,7,4) + '-' + SubString(A0177,11,2) + '-' + SubString(A0177,13,2)
else A0111
enda0111日期型,a0177字符型 另一个写法也不行
update A01 set A0111 =
case
when len(ltrim(a0177))=15 then cast('19'+ SubString(A0177,7,6) as datetime)
when len(ltrim(a0177))=18 then cast(SubString(A0177,7,8) as datetime)
else 0
end
结果出现:从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
感觉程序写的对的啊,是怎么回事啊update a set A0111 =
case Len(Rtrim(A0177) )
when 15 then '19' + SubString(A0177,7,2) + '-' + SubString(A0177,9,2) + '-' + SubString(A0177,11,2)
when 18 then SubString(A0177,7,4) + '-' + SubString(A0177,11,2) + '-' + SubString(A0177,13,2)
else A0111
enda0111日期型,a0177字符型 另一个写法也不行
update A01 set A0111 =
case
when len(ltrim(a0177))=15 then cast('19'+ SubString(A0177,7,6) as datetime)
when len(ltrim(a0177))=18 then cast(SubString(A0177,7,8) as datetime)
else 0
end
解决方案 »
- 这个格式怎么变的来着?不记得了。
- 在查询时如何为结果自动添加一个新字段,新字段的值全部是固定的字符串
- |M| 邹健大哥写的查询数据库表信息的在SQL2000可以,但是在SQL2005中就查询不出表和字段说明 麻烦大家进来帮改改
- 一字段的值只有两种,这个字段有没有必要建索引?
- 存储过程调优
- 菜鸟求帮助!!从别处拷回来一个陌生的数据库,怎么才能读懂它??
- 一个SQL的问题
- 关于SQL SERVER2005排序规则问题
- 求解---SQL查询统计
- 如何给时间字段赋空值?
- 如何让sql自动截断字符串,不用提示错误?
- 还是老问题,为什么存储过程放在不同的库执行,时间相差长达3分钟,2个库中存储过程所涉及的表结构和函数都一致,而且索引也相同!实在不知道
set @s = '340403195503031434'select cast(substring(@s,7,4) + '-' + substring(@s,11,2) + '-' + substring(@s,13,2) as datetime) as birthday/*
birthday
------------------------------------------------------
1955-03-03 00:00:00.000(所影响的行数为 1 行)
*/
确定输入表达式是否为有效的日期。
返回类型
int注释
如果输入表达式是有效的日期,那么 ISDATE 返回 1;否则,返回 0。select ..... from tb where isdate(substring(dt,7,4) + '-' + substring(dt,11,2) + '-' + substring(dt,13,2)) = 1