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

文章讨论了在Oracle数据库中,CASEWHEN语句用于空字符串()与其他值比较时的预期结果与实际不符。空字符串被视为不等于任何其他值,包括其他空字符串,这与NULL值的判空逻辑不同,应使用ISNULL函数进行判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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来判断。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小野猪

若恰好解决你的问题,望打赏哦。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值