170406回顾-SQL Server的smalldatetime类型比较
在比较SQL Server的类型为smalldatetime字段时出现下面的错误:将 expression 转换为数据类型 smalldatetime 时出现算术溢出错误
正确的比较方法如下:将long型转换为时间格式的字符串,再与smalldatetime类型的字段比较
SELECT * FROM tablename WHERE EditFlag > '2017/3/27 11:22:00' order by EditFlag
尝试了使用SQL Server的内部函数将long转换后比较,但是失败了:
sql1 = SELECT * FROM dbo.BC_patrolrecord WHERE EditFlag > date(149058492000) order by EditFlag
根据下面链接中的内容再次进行了尝试:
http://www.cnblogs.com/leoning/archive/2011/01/04/1925229.html
将long除以1000、再除以60,将其转换为分钟数进行比较,也失败了:
sql1 = SELECT * FROM dbo.BC_patrolrecord WHERE EditFlag > 149058492000/1000/60 order by EditFlag
在SQL Server客户端工具中做了下面的尝试:看来还得想想怎么和数字比较
select * from BC_patrolrecord where EditFlag > 149058492000; -- 失败
select * from BC_patrolrecord where EditFlag > 149058492; -- 失败
select * from BC_patrolrecord where EditFlag > 149058; -- 失败
select * from BC_patrolrecord where EditFlag > 14905; -- 成功
线索:“smalldatetime占4字节,精度1分钟,时间从1900.1.1到2079.6.6”有关系?
每天1440分钟,从1900.1.1算起到现在大约有1440*365*116+1440*30*3+1440*7=X分钟,这个X远远大于149058了。
下面是找到的另一篇文档,提到了一个convert函数:或可一试
http://www.myexception.cn/sql-server/159157.html