sql - CAST/CONVERT 问题 算术溢出错误
问题描述
SELECT
工作,但UPDATE
没有。
每个版本CAST
和CONVERT
我收到此错误:
将 int 转换为数据类型 numeric 的算术溢出错误
当我尝试这样做时:
$sql = "UPDATE rentinc ".
"SET curr_loss_mo = ROUND(CONVERT(numeric(3,0), DATEDIFF(DAY, missincdate, GETDATE()) / 30), 0) ".
"WHERE months2 > 12";
我很确定上面的代码有些矫枉过正,但我正在尝试一切。
我可以去 SSMS 并运行这个 SELECT:
SELECT curr_loss_mo, ROUND(CONVERT(numeric(3, 0), DATEDIFF(DAY, missincdate, GETDATE()) / 30), 0) AS DateNumCalc
FROM rentinc
WHERE months2 > 12
它工作正常。而且这两列看起来一模一样!该curr_loss_mo
字段是 anumeric(3,0)
并且表中没有将尝试使用超过三个字符进行更新的值。
那么为什么我会收到这个错误?
“将 int 转换为数字数据类型的算术溢出错误”
解决方案
事实证明,这个谜团变得更深了,但我找到了解决方法,所以我处理了它。
我制作了名为 temp_rentinc 的rentinc 表的临时副本。这是一个精确副本,如“SELECT * INTO temp_rentinc FROMrentinc”。
由于完全让我感到困惑的原因,我在上面发布的更新代码与 temp_rentinc 一起使用,但与rentinc 无关!感到困惑的是,我编写了一个程序来通过“SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = '每个表名”来比较结构。
该程序验证了它们完全相同。叹。有时,小精灵会抓住你。长话短说,我杀死了原始表,并反转 SELECT INTO 以重新创建表,代码现在可以正常工作了。
这在“WTF?”中。文件。谢谢各位的意见。 - 约翰
推荐阅读
- c# - 在正在测试的方法中创建参数时,Nsubstitute 总是返回 null
- c++ - sizeof(enum) 可以不同于 sizeof(std::underlying_type
::类型)? - string - Bash 比较字符串
- python - 在 pyspark 中使用 spark-sftp jar
- javascript - 使用 JS 或 PHP 将 html 转换为 pdf 的最快方法是什么?
- html - 带溢出的离子标签
- android - Android - 通过 viewModels() 在 ViewModel 上使用可注入构造函数
- postman - 使用 Postman 在 Keycloak 中创建新用户
- sql - 按位或 - SQLite 中的意外结果
- node.js - Ionic 3 登录问题(在 authService 后不会加载)