oracle对”跟空值的处理(转)

2023年 12月 12日 74.4k 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’’ #在MySQL里面可以查到结果
结果无记录!!!
尝试写法二

SELECT * FROM CRM.TEST20231130 WHERE COLUMN1 IS NOT null #MySQL里面查到包括 默认值为’'的数据
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’ #MySQL里面不能这样写,没有nvl函数
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
总结

在Oracle里面,默认值设置为’‘存储上等价于null,只能使用 “IS NULL”或者 “IS NOT NULL”来判断,但是MySQL里面字段默认值为’‘是 IS NOT NULL的存在,可以用 ’'来判断是否非空。

相关文章

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

发布评论