CONVERT(DATETIME,(SUBSTRING(a.ksrq,1,4 )+'-'+SUBSTRING(a.ksrq,5,2 )+'-'+SUBSTRING(a.ksrq,7,2 )+' '+SUBSTRING(a.ksrq,9,8 )))
我用这个函数转换的时候,查出来的结果报错:从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值。
跪求大神这个怎么操作
应该是varchar里面的时间范围超出了datetime类型的范围,建议使用datetime2,。
背景知识:
SQL Server 2008除了DateTime和SmallDateTime之外,又新增了四种时间类型,分别为:date,time,datetime2和datetimeoffset。
各时间类型范围、精度一览表:
数据类型 时间范围 精度
datetime 1753-01-01到9999-12-31 00:00:00 到 23:59:59.997 3.33毫秒
smalldatetime 1900-01-01 到 2079-06-06 00:00:00 到 23:59:59 分钟
date 0001-01-01 到 9999-12-31 天
time 00:00:00.0000000 到 23:59:59.9999999 100 纳秒
datetime2 0001-01-01 到 9999-12-31 00:00:00 到 23:59:59.9999999 100 纳秒
datetimeoffset 0001-01-01 到 9999-12-31 00:00:00 到 23:59:59.9999999 -14:00 到 +14:00 100 纳秒
各时间类型表达式一览表:
数据类型 输出
time 12:35:29. 1234567
date 2007-05-08
smalldatetime 2007-05-08 12:35:00
datetime 2007-05-08 12:35:29.123
datetime2 2007-05-08 12:35:29. 1234567
datetimeoffset 2007-05-08
12:35:29.1234567 +12:15