这种空比较总会产生相同的结果吗?

时间:2017-09-20 14:00:35

标签: sql sql-server tsql

我正在测试varchar字段是否为空或空。使用[field] <>''执行测试似乎工作得很好,包括值是NULL

但是,是否存在可能无法按预期工作的情况,例如不同的排序规则或ANSI NULL设置?

使用[field] IS NOT NULL AND [field]<>''会更安全吗?

4 个答案:

答案 0 :(得分:5)

这里根本不需要进行不等式检查(请记住&lt;&gt;是nonSARGable)。由于您希望行非NOT NULL而不是空字符串,因此您可以简化此操作并使谓词具有SARGable。

[field] > ''

答案 1 :(得分:0)

使用官方语法&#39; IS NULL&#39;会更安全。或者不是空的&#39;

答案 2 :(得分:0)

您可以查看以下脚本:

ISNULL([field], '') <> ''

答案 3 :(得分:0)

对于varchar字段,检查

[field] IS NOT NULL AND [field]<>'' 

可以像这样做得更短

ISNULL([field], '') <> ''

他们做同样的事情

但正如Pred在他的评论中提到的,它可能会对性能产生负面影响,所以肖恩的答案更好