当前位置: 首页 > news >正文

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来判断。

相关文章:

  • 抖店商家对接带货主播建议,远离头部主播保平安,附沟通话术模板
  • Apache ActiveMQ RCE CNVD-2023-69477 CVE-2023-46604
  • 计算机导论08-程序设计
  • 微信小程序 - 视图与逻辑 介绍
  • DML的基本操作
  • 风力发电防雷监测浪涌保护器的应用解决方案
  • LeetCode 每日一题 2024/1/8-2024/1/14
  • 使用scipy处理图片——滤镜处理
  • Rust 错误处理(上)
  • 爬虫之Cookie获取:利用浏览器模拟一个cookie出来、面对反爬虫、加密的cookie的应对方法
  • 如何在CentOS 7 中搭建Python 3.0 环境
  • 项目管理十大知识领域之项目整体管理
  • 车载音频EMI的产生及典型音频功放AW836XX的解决方案
  • C#使用Stopwatch实现执行耗时及性能监测
  • JavaScript类型检测【全】
  • [PHP内核探索]PHP中的哈希表
  • JavaScript-如何实现克隆(clone)函数
  • 《深入 React 技术栈》
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • ES6 学习笔记(一)let,const和解构赋值
  • Java 多线程编程之:notify 和 wait 用法
  • js对象的深浅拷贝
  • node学习系列之简单文件上传
  • Python进阶细节
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • V4L2视频输入框架概述
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 将回调地狱按在地上摩擦的Promise
  • 手机端车牌号码键盘的vue组件
  • 微信公众号开发小记——5.python微信红包
  • 一文看透浏览器架构
  • 与 ConTeXt MkIV 官方文档的接驳
  • 转载:[译] 内容加速黑科技趣谈
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​iOS实时查看App运行日志
  • #stm32整理(一)flash读写
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (独孤九剑)--文件系统
  • (二)斐波那契Fabonacci函数
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • .net wcf memory gates checking failed
  • .NET 解决重复提交问题
  • .net 流——流的类型体系简单介绍
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .net连接oracle数据库
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [BT]BUUCTF刷题第9天(3.27)