为什么在 SQL 中 '-' 等于 0(零)?

Why is '-' equal to 0 (zero) in SQL?

当您 运行 在 SQL Management studio 中进行以下查询时,结果 将为 1

SELECT 
    CASE WHEN '-' = 0 THEN 
        1 
    ELSE 
        0 
    END

这让我有点害怕,因为我必须多次检查 0 值,它似乎很容易等于值 '-'

你看错了。

'-' 是一个字符串,因此在与整数进行比较时会隐式转换为整数值:

select cast('-' as int) -- outputs 0

为确保您实际上是在将值与字符串“0”进行比较,请改为这样进行比较:

select case when '-' = '0' then 1 else 0 end

一般来说,当您比较不同数据类型的值时,您是在自找麻烦,因为 implicit conversions 发生在幕后 - 所以不惜一切代价避免它。