文档章节

查询字段值为null、0、空字符串的记录

bithup
 bithup
发布于 2017/12/23 16:01
字数 326
阅读 241
收藏 0

创建表tb_test

CREATE TABLE `tb_test` (
  `name` varchar(255) DEFAULT NULL,
  `value` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 插入几条数据

INSERT into tb_test VALUES ('null',NULL),('empty',''),('0','0'),('1','1'),('2','2');

 问题:查询出value字段为null,空字符串,字符串'0'和特定值'1'

--MySQL数据库版本
SELECT version()   5.6.21-log
SELECT @@version   5.6.21-log

--
SELECT * FROM tb_test WHERE `value`=1 or ISNULL(`value` or `value`=null);  --null,empty,0,1
SELECT * FROM tb_test WHERE `value`='1' or ISNULL(`value` or `value`=null);--null,empty,0,1
SELECT * FROM tb_test WHERE `value`=1;--1
SELECT * FROM tb_test WHERE `value`='1';--1
SELECT * FROM tb_test WHERE ISNULL(`value` or `value`=null);   --null,empty,0
SELECT * FROM tb_test WHERE ISNULL(`value`); --null
SELECT * FROM tb_test WHERE ISNULL(`value`=null); --null,empty,0,1,2
SELECT * FROM tb_test WHERE `value`=NULL; --这种方式获取到一条记录,所有字段都为null
SELECT '0'=NULL; --null
SELECT '1'=NULL; --null
SELECT ''=NULL; --null
SELECT 0=NULL; --null
SELECT 1=NULL; --null
SELECT NULL=NULL; --null
SELECT (NULL or NULL=NULL); --null
SELECT ('' or '' =NULL); --null
SELECT ('0' or '0'=NULL); --null
SELECT ('1' or '1'=NULL); --1
SELECT ('2' or '2'=NULL); --1

总结:= ,!=不能用来判断一个字段是否为空,应该用ISNULL()

任何值使用=与NULL比较返回的都是NULL

null、空字符串、字符串0、数字0与null进行or运算返回null

上述问题使用符合表达式ISNULL(`value` or `value`=null)可以分解为

value='0' or value='' or ISNULL(value)

 

 

© 著作权归作者所有

bithup
粉丝 8
博文 101
码字总数 82172
作品 0
朝阳
程序员
私信 提问
Oracle中的NULL(二、NULL详解)

说明:本篇文章是摘取自以下链接的Blog,但作者的这篇文章也是转载(非常感谢),我在记录的时候也有添加自己的思考。 http://blog.csdn.net/wh62592855/article/details/4724186 1、什么是N...

EillenMe
2013/01/11
872
2
Python全栈 MySQL 数据库 (表字段增、删、改、查、函数)

开局一张图 查询SQL变量 show variables 1.表字段的操作   1.语法:alter table 表名 执行动作;   2.添加字段(add)     alter table 表名 add 字段名 数据类型;(尾插)     a...

ParisGabriel
2018/07/31
0
0
mysql的空值与NULL的区别

MySQL数据库是一个基于结构化数据的开源数据库。SQL语句是MySQL数据库中核心语言。不过在MySQL数据库中执行SQL语句,需要小心两个陷阱。   陷阱一:空值不一定为空   空值是一个比较特殊...

雍雍_yoyo
2016/04/26
78
0
Mysql 面试复习

MYSQL支持事务 缺省模式下,MYSQL是autocommit模式的,所有的数据库更新操作都会即时提交 SET AUTOCOMMIT=0就可以使MYSQL允许在非autocommit模式 创建 1.使用默认的字符集与校对 create dat...

Galy_绿
2016/08/15
58
0
关于SqlServer的整形字段和空的查询

现象如下: 字段intType是整形的。 select * from Test where varcharType='test' and intType='' 可以查出 intType为0的记录。 update Test set dcr_times=''这时 Test的值为0。 关于 Orac......

晨曦之光
2012/06/07
159
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
43
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部