Posted on 2008-08-28 11:34
Qzi 阅读(1681)
评论(0) 编辑 收藏 所属分类:
SQL
“从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界”
错误的注意罗,下面是SQL Server下两种变量的详细介绍,时间值越界的明显就会报这个错误
datetime和smalldatetime
代表日期和一天内的时间的日期和时间数据类型。
datetime
从1753年1月1日到9999年12月31日的日期和时间数据,精确度为百分之三秒。如下表所示,把值调整到.000、.003、或.007秒的增量。(曾经试过使用1752有错,1753就没有错了,郁闷啊!)
microsoft®sqlserver™拒绝所有其不能识别为1753年到9999年间的日期的值。
smalldatetime
从1900年1月1日到2079年6月6日的日期和时间数据精确到分钟。29.998秒或更低的smalldatetime值向下舍入为最接近的分钟,29.999秒或更高的smalldatetime值向上舍入为最接近的分钟。
--returnstimeas12:35
selectcast(2000-05-0812:35:29.998assmalldatetime)
go
--returnstimeas12:36
selectcast(2000-05-0812:35:29.999assmalldatetime)
go
注释
microsoftsqlserver用两个4字节的整数内部存储datetime数据类型的值。第一个4字节存储basedate之前或之后的天数。基础日期是系统参考日期。不允许早于1753年1月1日的datetime值。另外一个4字节存储以午夜后毫秒数所代表的每天的时间。
smalldatetime数据类型存储日期和每天的时间,但精确度低于datetime。sqlserver将smalldatetime的值存储为两个2字节的整数。第一个2字节存储1900年1月1日后的天数。另外一个2字节存储午夜后的分钟数。日期范围从1900年1月1日到2079年6月6日,精确到分钟。