SQL 之 SQL server 中 遇到字段的值为null 遇到的坑
SQL server 中,如果查询或筛选的条件中,某字段的值为NULL,如何处理?又有哪些坑需要避免呢?
直接上坑 :
NULL 与其他任何类型进行逻辑判断:
【解释】:- NULL表示值未知,和空字符(空白)和0 不一样;
- NULL和NULL或其他任何值做逻辑判断的时候,返回的值都是UNKNOWN;
NULL 在in 或 not in 语句中,比如
where classNum in (null,1), 或where classNum not in (1,2),where classNum not in (1,2,null):where classNum in (null,1)是无法筛选出null的结果,但不会报错;where classNum not in (1,2),就算表中包含classNum is null的记录,但是同样也不会筛选出来
where classNum not in (1,2,null),不会报错,但是不会查出来任何结果,如果in语句里面是一个子查询,要避免查出来是null的结果,否则整个查询是没有结果的
在where中查询为NULL的结果,
= NULL(这个应该是一般人不会犯的错 :
【解释】:= NULL这样查询不会报错,但是不会查出任何结果;- NULL 只是一个表示“没有值”的标记
正确使用方法:
- 若要在查询中测试空值,请在 WHERE 子句中使用 IS NULL 或 IS NOT NULL。
- 在 SQL 中存在第三个逻辑值:unknown。这有点类似于我们平时所说的:对、错、不知道:
逻辑值有 true, false, unknown:

AND 的情况:false > unknown > true
OR 的情况:true > unknown > false与and和or运算符的逻辑运算结果:

参考链接:
SQL 之 SQL server 中 遇到字段的值为null 遇到的坑的更多相关文章
- 向已写好的多行插入sql语句中添加字段和值
#region 添加支款方式--向已写好的多行插入sql语句中添加字段和值 public int A_ZhifuFS(int diqu) { ; string strData = @"SEL ...
- SQL查询一个表中类别字段中Max()最大值对应的记录
SQL查询一个表中类别字段中Max()最大值对应的记录 SELECT A.id, A.name, A.version FROM DOC A, (SELECT id, MAX(version) ...
- CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储
CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...
- Sql Server中COUNT(字段名)跟COUNT(*)的特殊不同点
今天有个需求,有2张表: 1.一个“搜索记录”表search,一个“搜索后下载记录”表down 2.映射关系:每一个下载记录对应一条搜索记录, 第个 ...
- MySQL中设置同一张表中一个字段的值等于另一个字段的值
今天遇到了一个需求,我在一张表中新增了一个字段,因为这张表以前已经有很多数据了,这样对于以前的数据来说,新增的这个字段的值也就是为该字段的默认值,现在需要将新增的这个字段添加上数据,数据来源为同表的另 ...
- 获取请求 header 中指定字段的值
private function getHeader($name) {//获取请求头中$name的值 $name = 'HTTP_' . $name; foreach ($_SERVER as $ke ...
- 【转发】在SQL Server中通过字段值查询存储该字段的表
-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved. -- Purpose: To search all colu ...
- SQL Server 中根据字段值查询其所在的表、字段
DECLARE @what varchar(800)SET @what='123456' --要搜索的字符串 DECLARE @sql varchar(8000) DECLARE TableC ...
- sql server中bit字段实现取反操作
update Fct_StockMove set Disabled=Disabled^1 WHERE MoveId='DCE268E0-2CB3-4D17-AC4E-0046FB459CAD'; 1. ...
- SQL SERVER 2008 设置字段默认值为当前时间
在某些情况下需要对某条记录添加上时间戳,比如用户注册,需要记录用户的注册时间,在SQL SERVER 2008中可以通过 1. 添加新字段 2. 数据类型设置为smalldatetime 3. 默认值 ...
随机推荐
- 小白之Python-基础中的基础04
继续.. ------------------------华丽的分界线----------------------------- Python-基础中的基础04 --之方法 格式:对象.方法() 1. ...
- c++文件中,头文件与实现文件该写什么内容
1. 参考https://www.cnblogs.com/fenghuan/p/4794514.html
- SQL server数据库中nvarchar和varchar的区别
先说结论: 存储内容含有汉字的使用nvarchar 存储内容全是英文没有汉字的使用varchar 1.varchar是非Unicode可变长度类型,nvarchar是Unicode可变长度类型. 2. ...
- git submodule .gitmodules 子模块
初始化 git submodule init 添加子项目 git submodule add -b xxxx {path} -b 指定分支 path 可为空 (不知为何, 直接写在 .gitmodul ...
- linux内核中根据函数指针追踪调用函数名
2 linux内核中根据函数指针追踪调用函数名 linux内核的printks可以输出函数指针对应的函数名. printk("func: %pF at address: %p\n" ...
- Pyscript使用本地Pyodide配置方法
背景 Pyscript工程本身很小,KB级别,引用的Pyodide工程比较大,因为包含了各种类库的wasm文件,默认引用了cdn上的文件,cdn上的文件又在外网,访问会中断导致不可用,于是需要使用本地 ...
- JS实现复制富文本到剪贴板/粘贴板的最佳实践
背景 最近有想实现一个功能,通过点击一个button按钮,来复制网页内容(含html)来实现复制后粘贴到邮件或者word具有富文本的效果.在网站翻了一些资料,要么就是方法已经被弃用,要么就是兼容性特别 ...
- 3-MIRO发票校验设置默认税码-OMR2
- vscode vue代码模板
{ "Print to console": { "prefix": "vue", "body": [ "< ...
- Impala 学习笔记
VALUES Statement | 6.3.x | Cloudera Documentation SELECT now() as date_DES UNION ALL SELECT trunc(no ...