大家好,又见面了,我是你们的朋友全栈君。
在比较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
转载于:https://www.cnblogs.com/luo630/p/6676795.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144703.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...