sql - 即使 SQL 查询不返回任何结果,也将 varchar 转换为十进制时出错
问题描述
我有一个不获取任何行的 SQL 查询。我在 select 语句中使用转换函数从 varchar 转换为十进制,我收到异常说不能将 varchar 转换为十进制。
这是我的查询
select distinct
order_id, order_amt,
cast(replace(order_amt, ',', '') as decimal(11, 2)) as amt
from
table1
left join
table2 on table1.order_id = table2.order_num
where
table2.order_num is null
and table1.order_id not in (123, 456)
不知道为什么我会收到错误,即使查询没有返回结果。
任何输入都受到高度赞赏。
解决方案
您无法控制 SQL Server 决定评估表达式的位置。因此,表达式可能会被评估(并产生错误),即使是在被过滤掉的行上。
在这种情况下,有一个非常简单的解决方案 try_cast()
:
Try_Cast(Replace(order_amt, ',', '') as decimal(11,2)) as amt
推荐阅读
- laravel - laravel中Cache和Redis门面的区别?
- javascript - 在 ES6 承诺中的 for 循环中返回为“未定义”的值
- cypress - 使用来自用户的输入运行赛普拉斯命令
- excel - 如何防止 Excel 表格的格式覆盖 VBA 中范围的现有格式?
- python - 根据另一列Python的某个值将一行中的单词分成几行
- javascript - 如何使用具有另一个对象数组但不具有 ES6 属性的对象对数组进行排序
- regex - 如何使用rexex(Python)将带有未闭合括号的数字与闭合括号匹配
- winforms - Powershell Forms - 如何添加上下文菜单事件处理程序以防止打开,除非选择项目?
- c# - 两个对象(一个在列表<>中)共享相同的内存地址,即如果一个对象被更改,它会更改列表中的另一个对象
- ios - 与 UITableView.backgroundView 中的元素交互