SQL 中 NULL值测试代码

刚刚想从数据库中的表EXPERT_DETAILS中检索出修改人Modifier(类型 VARCHAR2(20),可为空)为空的那些记录,因为该字段的类型为VARCHAR2(20),我使用的SQL语句为

复制代码 代码如下:

select * from expert_details twhere t.modifier = ''

没有检索出一条记录,而这与存储在该表中的记录是不相符的。后来想到即便是空字符型存储在数据库中也应该是NULL而不是''。

然后我使用下列SQL 语句,仍然没有检索出一条记录。

复制代码 代码如下:

select * from expert_details t

where t.modifier = null

最后我想到了SQL中的NULL 值测试。使用如下语句,终于检索出了想要的结果。

复制代码 代码如下:

select * from expert_details t

where t.modifier is null

在SQL语句中,where 子句:where t.modifier = null ,这里不可以使用NULL关键字,因为它不是一个真正的值,它仅仅是一个符号,因为它的值是未知的。当t.modifier本身就是null时,即where子句为:where null= null ,当等号两边的值都是未知的时候,结果是TRUE还是FALSE,SQL不能给出一个明确的结果,所以查询出的结果也为NULL。

因此必须明确使用NULL值测试即 字段 IS NULL 或者其否定形式 字段 IS NOT NULL 来检测NULL值。

时间: 2024-11-08 21:47:06

SQL 中 NULL值测试代码的相关文章

SQL 中 NULL值测试代码_MsSql

刚刚想从数据库中的表EXPERT_DETAILS中检索出修改人Modifier(类型 VARCHAR2(20),可为空)为空的那些记录,因为该字段的类型为VARCHAR2(20),我使用的SQL语句为 复制代码 代码如下: select * from expert_details twhere t.modifier = '' 没有检索出一条记录,而这与存储在该表中的记录是不相符的.后来想到即便是空字符型存储在数据库中也应该是NULL而不是''. 然后我使用下列SQL 语句,仍然没有检索出一条记录

Sql与oracle中null值

  1 null值的介绍 NULL 是数据库中特有的数据类型,当一条记录的某个列为 NULL ,则表示这个列的值是未知的.是不确定的.既然是未知的,就有无数种的可能性.因此, NULL 并不是一个确定的值. 这是 NULL 的由来.也是 NULL 的基础,所有和 NULL 相关的操作的结果都可以从 NULL 的概念推导出来. 2 oracle中的null值介绍 在不知道具体有什么数据的时候,即未知,可以用NULL, 称它为空,ORACLE中,含有空值的表列长度为零.允许任何一种数据类型的字段为空

动态-JAVA 中Null值到底是什么

问题描述 JAVA 中Null值到底是什么 public class test { public static void main(String[] args) throws Exception { Temp temp = new Temp(); temp.test("1"); temp.test(null); } } public class Temp { public void test(Object a){ System.out.println("test Object

MySQL · 专家投稿 · InnoDB物理行中null值的存储的推断与验证

前言 想写这边文章,是因为之前想写一个解析innodb ibd文件的工具,在写这个工具的过程中,发现逻辑记录转物理记录的转换中,最难的有两部分,一是每行每字段null值占用的字节和存储,二是变长字段占用的字节和存储的格式.本文中重点针对第一种情况. 之前看有关介绍compact行记录格式: 变长字段之后的第二个部分是NULL标志位,该位指示了该行数据中是否有NULL值,有则用1表示.该部分所占字节为1字节 -–<InnoDB存储引擎> 之后便思考是否不管有多少个列都是NULL,该部分都只占1个

请教各位同仁有关hibernate查询语句中order by中null值的处理,

问题描述 目前有个DAO方法,采用HQL进行查询,最后order by A desc ,但A有空值,由于,后台数据库是oracle,所以采用desc到话,默认null值最大,查询出来的结果排在了最前面,实际需求需要把空值的结果集放在最后.不知道各位有没有遇到类似的问题,帮忙解决一下!先谢谢了 解决方案 最最土的办法:加一个标识列alter table xx add (flags char(1) default '0');update xx set flags = '1' where tt is

JS 去除Array中的null值示例代码_javascript技巧

复制代码 代码如下: function ClearNullArr(arr){ for(var i=0,len=arr.length;i<len;i++){ if(!arr[i]||arr[i]==''||arr[i] === undefined){ arr.splice(i,1); len--; i--; } } return arr; }

在C#中事物是写在sql中好还是C#代码中好。

问题描述 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQLServer能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性.在sqlerver+.net开发环境下,有两种方法能够完成事务的操作,保持数据库的数据完整性:一个就是用sql存储过程,另一个就是在ADO.NET中一种简单的事务处理:到底哪种更好呢?求详解............ 解决方案 解决方案二:你说的都是经典方式各有各的用处没

动态创建样式表在各浏览器中的差异测试代码_javascript技巧

复制代码 代码如下: <!doctype html> <head></head> <body> <span id="con">xxx</span> <script> var css = document.createElement('style'); css.setAttribute('type', 'text/css'); var cssText = 'span{color:Red;}'; if(cs

心跳包中怎样加测试代码?

问题描述 我做的是客户机向主机发送心跳包,想在心跳包中加个特殊校验位,当主机接收到包后分析校验位判断客户端的情况.