从 nvarchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。

drop table 事件状态统计
select 事件编号,设备编号,
cast(substring([恢复日期],1,4)+substring([恢复日期],6,2)+substring([恢复日期],9,2)+
' '+substring([恢复时间],1,2)+':'+
substring([恢复时间],3,2)+':'+substring([恢复时间],5,2) as datetime) as [恢复时间],
cast(substring([记录日期],1,4)+substring([记录日期],6,2)+substring([记录日期],9,2)+
' '+substring([记录时间],1,2)+':'+
substring([记录时间],3,2)+':'+substring([记录时间],5,2) as datetime) as [记录时间],
100000.00 as 时间,
100000.00 as 服务率,SPACE(50) as jigou
into 事件状态统计
from [jmdata].[dbo].事件状态查询

执行提示:从 nvarchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值
之前都可以正常运行的,只试过有一次出现同样的问题,但只要在数据库中改变数据类型就可以了的,但我现在忘了怎么改啊~~

--把nvarchar转换成datetime之前先判断是否是日期,如果不是可置为null值或其它固定值(如:1900-01-01 00:00:00)

drop table 事件状态统计
select 事件编号,设备编号,
cast(
(case when
isdate(
substring([恢复日期],1,4)+substring([恢复日期],6,2)+substring([恢复日期],9,2)+
' '+substring([恢复时间],1,2)+':'+
substring([恢复时间],3,2)+':'+substring([恢复时间],5,2)
)=1
then
substring([恢复日期],1,4)+substring([恢复日期],6,2)+substring([恢复日期],9,2)+
' '+substring([恢复时间],1,2)+':'+
substring([恢复时间],3,2)+':'+substring([恢复时间],5,2)
else '1900-01-01 00:00:00'
end) as datetime) as [恢复时间],
cast(
(case when
isdate(
substring([记录日期],1,4)+substring([记录日期],6,2)+substring([记录日期],9,2)+
' '+substring([记录时间],1,2)+':'+substring([记录时间],3,2)+':'+substring([记录时间],5,2)
)=1
then
substring([记录日期],1,4)+substring([记录日期],6,2)+substring([记录日期],9,2)+
' '+substring([记录时间],1,2)+':'+substring([记录时间],3,2)+':'+substring([记录时间],5,2)
else '1900-01-01 00:00:00'
end) as datetime) as [记录时间],
100000.00 as 时间,
100000.00 as 服务率,SPACE(50) as jigou
into 事件状态统计
from [jmdata].[dbo].事件状态查询
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-14
你仔细看看 你的 恢复日期,恢复时间,记录日期,记录日期的格式,

你的问题 应该出现在转换越界,比如 月份有可能出现13的值/ 日期有可能出现出现32的值/ 小时 有出现24 值/分钟有60以上/秒有60以上的值,造成数据库转换越界。

或者 比如 : 2010-02-30 15:30:30 2010-02-29 15:30:30 就会转换越界, 因为2月没有30号的,或者只有闰年才有29号
第2个回答  2011-09-14
0000.00.00.1 转型不对追问

之前都是这样都没问题的,只试过有一次出现同样的问题,但只要在数据库中改变数据类型就可以了的,但我现在忘了怎么改啊~~
转型不对,那需要怎么修改呢?

...datetime 数据类型的转换产生一个超出范围的值
说明你的表 cdsgus 中的 birthday 字段的值中有不是正常日期格式的数据,如:1980\/01, 1980.01, 最好是将数据整成日期格式,想偷懒那就写脚本时处理,1 先看是否为日期格式,如果是,直接用 birthday 比较 2 如果不是日期格式,看看长度 3 根据长度具体处理, 如:长 7 位,后面加个天数...如:SE...

...datetime 数据类型的转换产生一个超出范围的值
select * from dbo.studentwhere born_date> '1988\/01\/01'这样是不报错的,你看看birthday是什么数据类型。

转换nvarchar值时溢出了整数列
当您尝试将一个`nvarchar`(即文本类型)的值转换为整数类型列时,如果出现“转换nvarchar值时溢出了整数列”的错误,这通常意味着文本中包含的数值超出了该整数列能够表示的范围。例如,如果您有一个整数列定义为`INT`类型(在大多数数据库中,`INT`的范围是从-2,147,483,648到2,147,483,647),...

...将数据类型 nvarchar 转换为 datetime 时出错。
这一般是由于你在数据库的表中定义某一个字段的type,和你输入的类型的不一致导致的。例如,你定义birthday为int或nvarchar,而你在代码中赋值,传入数据库的却是一个日期类型2013-09-14,此时,就会报类似的错误。

如何将nvarchar类型转换为datetime类型
将 expression 转换为数据类型 datetime 时出现算术溢出错误。原为nvarchar类型的日期字段,修改为datetime类型,错误如上 其中应该有不符合时间日期的数据,语句检查:select DateCOL,* from tb where isdate(DateCOL)=0 select count(*) from tb where isdate(DateCOL)=...

WIN8 执行SQL语句提示 从数据类型 nvarchar 转换为 datetime 时出错
如果有AM, 把AM去掉就可以了!!如果有PM的话,把小时部分加12即可!!或者修改电脑中的默认时间格式!!或者使用Convert函数把字符串转成datetime再使用!!

sqlserver语句从数据类型 nvarchar 转换为 bigint 时出错
联合查询需要连接两个表的字段的取值应该一样,你的conID,与第二个.userID AS varchar(50)),两个不是同一个类型,最好变为一致,应该问题是在这里。

指定的参数已超出有效值的范围
sqlcom.Parameters.Add(new SqlParameter("@STUD_NAME",SqlDbType.NVarChar,GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim()));sqlcom.Parameters.Add(new SqlParameter("@STUD_BIRTHDAY",(DateTime)...\/*将生日转为DateTime类型*\/);\/*把其它列的参数加入,包括@STUD...

oracle nvarchar2 转换成 datetime
先设置一个备份的字段,比如A1,为时间类型。先不齐intime的长度,如果是2013-05-16,后面补00:00:00,注意有个空格。判断用长度既可 之后用to_date(intime,'yyyy-mm-dd hh24:mi:ss')更新到A1去,检查没问题后,把intime更换成其他名字,不删除,备份;再把A1更换成intime就行了 ...

SQLServer的 将nvarchar 值'Values'转换为数据类型为int的列时发生语法...
insert的那些字段与后面的select的不一致

相似回答