Oracle数据库避坑:CASE WHEN ‘ ‘ = ‘ ‘ 空字符串比较,预期的结果与判断逻辑的实现之间存在不匹配

Oracle数据库避坑:CASE WHEN ' ' = ' ' 空字符串比较,预期的结果与判断逻辑的实现之间存在不匹配

  • 1、背景
  • 2、具体示例分析
  • 3、其他相同案例
  • 4、结论

1、背景

  • 在业务开发中,查询sql视图时,使用CASE WHEN语句判断空字符串是否不等于column时,预期的结果与判断逻辑的实现之间存在不匹配。详下下方示例Sql:

2、具体示例分析

  • ‘’ = ‘’ 空字符串比较,结果是不等于,是否出乎预料?
	SELECT CASE WHEN '' = '' THEN '等于' ELSE '不等于' END FROM DUAL;		-- 不等于
  • ’ ’ = ’ ’ 空格的比较
	SELECT CASE WHEN ' ' = ' ' THEN '等于' ELSE '不等于'   END FROM DUAL;		-- 等于
  • ‘20’ = ‘20’ 字符串的比较
	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 = '';  -- 返回空结果集,因为column列中没有值为空字符串的行  
	SELECT * FROM table WHERE column != ''; -- 返回空结果集,因为column列中没有值为空字符串的行

4、结论

  • 在SQL中,空字符串(‘’)与任何其他字符串(包括空字符串)比较都是不等于的
  • 空字符串的比较和NULL的判空是一个类型的,不能使用NULL = NULL来判断,可以使用IS NULL来判断。

你可能感兴趣的:(oracle,数据库)