SQL NULL值比较陷阱

您所在的位置:网站首页 sqlserver判断null和空值 SQL NULL值比较陷阱

SQL NULL值比较陷阱

2024-07-16 12:54:56| 来源: 网络整理| 查看: 265

SQL NULL值比较陷阱

起因:在与其他系统对接时,他们要下发数据到table表,下发逻辑为如果A字段的值不是“XXX”和“YYY”就不会下发这条数据,因为之前是没有下发A字段,所以A字段的值一直都是NULL,但是查了数据库还存在"“的,也就是A字段的值现在是存在NULL、”"、“XXX”、“YYY"四种情况,下端的业务逻辑根据下发的字段值要进行部分调整,如果A的值不是"XXX"和"YYY"就不能进行保存,所以在后端要进行逻辑判断,查询当前工单A字段的值是否为"XXX"和"YYY”, 笔者的做法是: SELECT 1 FROM table WHERE A 'XXX' AND A 'YYY' 如果查到数据为空就正常保存,如果查出来有数据就就进行报错之后回滚。 但是明明为A字段为NULL 的数据在保存的时候正常保存了,于是对SQL单独执行之后发现了问题,通过百度大法得知这个现象学名是NULL值陷阱,如果字段值W为空字符串就不会出现此问题,要规避此问题最简单的就是加上NULL的判断了,于是把SQL改成

SELECT 1 FROM table WHERE (A IS NOT NULL AND A 'XXX' AND A 'YYY') OR A IS NULL

当然这个是最简单粗暴的方法,看到有其他网友的解决方法还存在

SELECT * FROM some_table WHERE nvl(field1, null_if_value)=nvl(field2, null_if_value)

NVL函数是Oracle的一个空值转换函数,相当于mysql的IFNULL

NVL(表达式1,表达式2)

如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。 原理就是用一个控制转换函数把NULL转换成别的字符串来和目标值进行比较 NVL()是oracle数据库中的函数 IFNULL()是mysql数据库中的函数 mysql版本就是

SELECT 1 FROM table WHERE IFNULL(A,'') 'XXX' AND IFNULL(A,'') 'YYY'

希望大家在开发中尽量规避这些问题



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭