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

发布时间:2024年01月17日

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;		-- 等于
  • ‘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来判断。
文章来源:https://blog.csdn.net/gongjin28_csdn/article/details/135644420
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。