首页 > 解决方案 > 即使 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)

不知道为什么我会收到错误,即使查询没有返回结果。

任何输入都受到高度赞赏。

标签: sqlsql-servertsql

解决方案


您无法控制 SQL Server 决定评估表达式的位置。因此,表达式可能会被评估(并产生错误),即使是在被过滤掉的行上。

在这种情况下,有一个非常简单的解决方案 try_cast()

Try_Cast(Replace(order_amt, ',', '') as decimal(11,2)) as amt

推荐阅读