Oracle数据库避坑:CASE WHEN ' ' = ' ' 空字符串比较,预期的结果与判断逻辑的实现之间存在不匹配
1、背景
- 在业务开发中,查询sql视图时,使用CASE WHEN语句判断空字符串是否不等于column时,预期的结果与判断逻辑的实现之间存在不匹配。详下下方示例Sql:
2、具体示例分析
- ‘’ = ‘’ 空字符串比较,结果是不等于,是否出乎预料?
SELECT CASE WHEN '' = '' THEN '等于' ELSE '不等于' END FROM DUAL;
SELECT CASE WHEN ' ' = ' ' THEN '等于' ELSE '不等于' END FROM DUAL;
SELECT CASE WHEN '20' = '20' THEN '等于' ELSE '不等于' END FROM DUAL;
- ‘20’ != ‘’ ,结果是等于,是否出乎预料?
SELECT CASE WHEN '20' != '' THEN '不等于' ELSE '等于' END FROM DUAL;
- ‘’ != ‘20’ 的比较,结果是等于,是否出乎预料?
SELECT CASE WHEN '' != '20' THEN '不等于' ELSE '等于' END FROM DUAL;
3、其他相同案例
SELECT * FROM table WHERE column = '';
SELECT * FROM table WHERE column != '';
4、结论
- 在SQL中,空字符串(‘’)与任何其他字符串(包括空字符串)比较都是不等于的。
- 空字符串的比较和NULL的判空是一个类型的,不能使用NULL = NULL来判断,可以使用IS NULL来判断。