oracle类似isempty,NULLs和empty strings在不同数据库的中特点
1.以oracle為例
SQL> create table test(id int primary key,content varchar(20));
SQL> INSERT INTO test (id, content) VALUES (1, NULL);
SQL> INSERT INTO test (id, content) VALUES (2, '');
SQL> INSERT INTO test (id, content) VALUES (3, ' ');
SQL> INSERT INTO test (id, content) VALUES (4, 'x');
SQL> select * from test;
ID CONTENT
---------- --------------------
1
2
3
4 x
SQL> 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> select id,content,length(content) from test;
ID CONTENT LENGTH(CONTENT)
---------- -------------------- ---------------
1
2
3 1
4 x 1
SQL>
從結果可以看到,empry string被插入表中時,被當做NULL對待。因此,empty strings不會在數據庫中存儲。?單個空格是不會被轉換的,因為不是一個empty string。
2.以mysql為例
>create table test(id int primary key,content varchar(20));
>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');
>select * from test;
+----+---------+
| id | content |
+----+---------+
| 1 | NULL |
| 2 | |
| 3 | |
| 4 | x |
+----+---------+
4 rows in set (0.00 sec)
>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 | NULL | 1 | 0 | 0 |
| 2 | | 0 | 1 | 1 |
| 3 | | 0 | 1 | 1 |
| 4 | x | 0 | 0 | 0 |
+----+---------+--------+---------+-------+
4 rows in set (0.00 sec)
>select id,content,length(content) from test;
+----+---------+-----------------+
| id | content | length(content) |
+----+---------+-----------------+
| 1 | NULL | NULL |
| 2 | | 0 |
| 3 | | 1 |
| 4 | x | 1 |
+----+---------+-----------------+
可以看到NULL和empty string是不同的。而empty string和空格string被認為是相同的,但是在計算長度的時候卻又不同了。
3.以pg為例
postgres=# create table test(id int primary key,content varchar(20));
postgres=# INSERT INTO test (id, content) VALUES (1, NULL);
postgres=# INSERT INTO test (id, content) VALUES (2, '');
postgres=# INSERT INTO test (id, content) VALUES (3, ' ');
postgres=# INSERT INTO test (id, content) VALUES (4, 'x');
postgres=# select * from test;
id | content
----+---------
1 |
2 |
3 |
4 | x
(4 rows)
postgres=# 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 | | 0 | 1 | 0
3 | | 0 | 0 | 1
4 | x | 0 | 0 | 0
(4 rows)
postgres=# select id,content,length(content) from test;
id | content | length
----+---------+--------
1 | |
2 | | 0
3 | | 1
4 | x | 1
(4 rows)
postgres=#
看前兩行,NULL被插入后仍被當做NULL,不能當做empty string。從第二行可以看到,插入的empty string沒有被當做NULL,仍然是一個empty string。
NULLs和non-NULLs
(1)oracle數據庫
SQL> 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
SQL>
在oracle中,NULLs和字符相連接后,輸出結果是字符。
(2)mysql數據庫
>SELECT id, content,
content || NULL AS concatnull,
content || 'x' AS concatchar
FROM test;
+----+---------+------------+------------+
| id | content | concatnull | concatchar |
+----+---------+------------+------------+
| 1 | NULL | NULL | NULL |
| 2 | | NULL | 0 |
| 3 | | NULL | 0 |
| 4 | x | NULL | 0 |
+----+---------+------------+------------+
mysql中可以用concat拼接多個,但用||無法拼接字符串,會顯示零。
>SELECT id, content,
concat(content,NULL) AS concatnull,
concat(content,'x') AS concatchar
FROM test;
+----+---------+------------+------------+
| id | content | concatnull | concatchar |
+----+---------+------------+------------+
| 1 | NULL | NULL | NULL |
| 2 | | NULL | x |
| 3 | | NULL | x |
| 4 | x | NULL | xx |
+----+---------+------------+------------+
NULL和non-NULLS拼接結果是NULL
(3)pg數據庫
postgres=# SELECT id, content,
postgres-# content || NULL AS concatnull,
postgres-# content || 'x' AS concatchar
postgres-# FROM test;
id | content | concatnull | concatchar
----+---------+------------+------------
1 | | |
2 | | | x
3 | | | x
4 | x | | xx
(4 rows)
postgres=#
在pg中,NULLs和字符相連接后,NULL出現在任何一個值中都意味著結果是NULL作為輸出值,而不管它連接的是什么。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的oracle类似isempty,NULLs和empty strings在不同数据库的中特点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 缩减oracle日志,[20180829
- 下一篇: 达梦数据查询编码_查询数据库的编码方式