MSSQL日期转INT遇算术溢出错误,求正确转换方法
MSSQL日期转INT时算术溢出的解决方法
问题原因
算术溢出是因为你计算出的数值超出了INT类型的取值范围(INT最大值为2147483647)。比如取年份后两位(如24)乘以100000000得到2400000000,这个数已经大于INT的上限,直接触发溢出报错。另外你的表列引用语法有误,应该用[dbo].[QI_Data].[DateEntered]而非[dbo.QI_Data.DateEntered]。
解决方案
方案1:改用BIGINT类型存储结果
BIGINT的取值范围远大于INT(最大值为9223372036854775807),完全能容纳你需要的日期分钟级编码值。修改代码如下:
(CONVERT([bigint],(((right(datepart(year, [dbo].[QI_Data].[DateEntered]),(2))*(100000000) +datepart(month, [dbo].[QI_Data].[DateEntered])*(1000000)) +datepart(day, [dbo].[QI_Data].[DateEntered])*(10000)) +datepart(hour, [dbo].[QI_Data].[DateEntered])*(100)) +datepart(minute, [dbo].[QI_Data].[DateEntered]))) AS DateEnteredToInt
方案2:用FORMAT函数简化转换(SQL Server 2012+)
如果你的SQL Server版本是2012及以上,可以用更简洁的FORMAT函数直接生成yyMMddHHmm格式的字符串,再转换为BIGINT,代码更易读且不易出错:
CONVERT(BIGINT, FORMAT([dbo].[QI_Data].[DateEntered], 'yyMMddHHmm')) AS DateEnteredToInt
注意事项
如果业务强制要求使用INT类型,那只能放弃小时和分钟的编码(仅保留yyMMdd格式,最大值为991231,在INT范围内),但这样会丢失时间精度,一般不推荐。
内容的提问来源于stack exchange,提问作者DevGianArt
相关产品推荐
相关产品推荐

