oracle对”跟空值使用笔记

2023年 11月 30日 114.0k 0

空值在Oracle中的定义

空值(null)在Oracle中定义为缺失值,是与任何其他值都不同的一种特殊值。它代表着数据缺失或未知的情况,常常出现在未输入数据或在某些字段上没有数据的情况下。而在处理空值时,需要在语句中使用“IS NULL”或“IS NOT NULL”进行判断。

测试验证

测试表结构

CREATE TABLE “CRM”.“TEST20231130”
( “COLUMN1” VARCHAR2(100) DEFAULT ‘’,
“COLUMN2” VARCHAR2(100) DEFAULT null,
“COLUMN3” DATE DEFAULT sysdate
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE “CRM” ;

插入数据

INSERT INTO CRM.TEST20231130(COLUMN1,COLUMN2,COLUMN3) values(‘1’,‘2’,sysdate)
INSERT INTO CRM.TEST20231130(COLUMN1,COLUMN2,COLUMN3) values(‘2’,‘2’,sysdate)
INSERT INTO CRM.TEST20231130(COLUMN2,COLUMN3) values(‘3’,sysdate)
INSERT INTO CRM.TEST20231130(COLUMN2,COLUMN3) values(‘4’,sysdate)
INSERT INTO CRM.TEST20231130(COLUMN1,COLUMN2,COLUMN3) values(’ ',‘5’,sysdate)

查询所有数据

SELECT * FROM CRM.TEST20231130

COLUMN1 COLUMN2 COLUMN3
1 2 2023-11-30 17:52:48.000
2 2 2023-11-30 17:52:58.000
3 2023-11-30 17:53:20.000
4 2023-11-30 17:54:09.000
5 2023-11-30 17:55:57.000

查询需求

想要查询出所有COLUMN1不为空的数据

尝试写法一

SELECT * FROM CRM.TEST20231130 WHERE COLUMN1’’
结果无记录!!!

尝试写法二

SELECT * FROM CRM.TEST20231130 WHERE COLUMN1 IS NOT null

COLUMN1 COLUMN2 COLUMN3
1 2 2023-11-30 17:52:48.000
2 2 2023-11-30 17:52:58.000
5 2023-11-30 17:55:57.000

尝试写法三

SELECT * FROM CRM.TEST20231130 where nvl(COLUMN1,‘null’)‘null’

COLUMN1 COLUMN2 COLUMN3
1 2 2023-11-30 17:52:48.000
2 2 2023-11-30 17:52:58.000
5 2023-11-30 17:55:57.000

总结

在MySQL里面跟Oracle里面,字段的默认值设置为’‘时,底层实现是不一样的,Oracle里面只能通过转换函数nvl在使用运算符做查询,在MySQL理解可以直接使用做查询。在MySQL里面,默认值设置为’‘时使用 is not null 是能查到值为’'的数据,is null是查不到的。只有默认值为null,才能用 is null来查询。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论