oracle和postgresql中对待NULLs和空字符串(empty string)的方式
2021-05-07 17:29 abce 阅读(3210) 评论(0) 编辑 收藏 举报
oracle中的NULLs和空字符串(empty string)
1 2 3 4 5 6 | CREATE TABLE test ( id NUMERIC ( 3, 0 ) PRIMARY KEY , content VARCHAR ( 255 ) ); INSERT INTO test (id, content) VALUES (1, NULL ); INSERT INTO test (id, content) VALUES (2, '' ); INSERT INTO test (id, content) VALUES (3, ' ' ); INSERT INTO test (id, content) VALUES (4, 'x' ); |
这里我们显式插入了NULL和一个空字符串、一个只有单个空格的字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT id,content, CASE WHEN content IS NULL THEN 1 ELSE 0 END AS isnull , CASE WHEN content = '' THEN 1 ELSE 0 END AS isempty, CASE WHEN content = ' ' THEN 1 ELSE 0 END AS blank FROM test; ID CONTENT ISNULL ISEMPTY BLANK ---------- ------------------------------ ---------- ---------- ---------- 1 1 0 0 2 1 0 0 3 0 0 1 4 x 0 0 0 SQL> |
这里可以看出,插入数据库后,空字符串被当做NULL处理了。也就是说空字符串(empty string)在数据库中是不能存储的。
而只有单个空格的字符串是不会被转成NULL的。因为它并不是空字符串(empty string)
postgresql中的NULLs和空字符串(empty string)
使用相同的表结构
1 2 3 4 5 6 7 8 9 10 11 12 13 | postgres@=# SELECT id,content, postgres-# CASE WHEN content IS NULL THEN 1 ELSE 0 END AS isnull , postgres-# CASE WHEN content = '' THEN 1 ELSE 0 END AS isempty, postgres-# CASE WHEN content = ' ' THEN 1 ELSE 0 END AS blank postgres-# FROM postgres-# test; id | content | isnull | isempty | blank ----+---------+--------+---------+------- 1 | | 1 | 0 | 0 2 | | 0 | 1 | 0 3 | | 0 | 0 | 1 4 | x | 0 | 0 | 0 (4 rows ) |
插入的NULL仍然是NULL,不能和空字符串进行比较;插入的空字符串也没有被转化成NULL。
另一个不同是oracle和postgresql中对NULL和非空字符的连接操作
oracle中
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT id,content, content || NULL AS concatnull, content || 'x' AS concatchar FROM test; ID CONTENT CONCATNULL CONCATCHAR ---------- -------------------- -------------------- -------------------- 1 x 2 x 3 x 4 x x xx |
oracle将NULL和一个字符连接后,将字符作为结果返回。
postgresql中
1 2 3 4 5 6 7 8 9 10 11 | postgres@=# SELECT id,content, postgres-# content || NULL AS concatnull, postgres-# content || 'x' AS concatchar postgres-# FROM postgres-# test; id | content | concatnull | concatchar ----+---------+------------+------------ 1 | | | 2 | | | x 3 | | | x 4 | x | | xx |
在pg中,NULLs和字符相连接后,NULL出现在任何一个值中都意味着结果是NULL作为输出值,而不管它连接的是什么。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)