空文字とNULLの扱い
Verticaでは、CHAR型やVARCHAR型の列に「空文字」や「NULL」をINSERTした場合、それぞれ結果が異なります。
以下に6パターンのデータの挙動を整理してみます。
値 | 内容 | 挙動 |
|---|---|---|
ブランク、囲みなし | 構文エラーにより、挿入できない | |
null | 小文字、囲みなし | NULLデータとして挿入される |
NULL | 大文字、囲みなし | NULLデータとして挿入される |
’’ | ブランク、囲みあり | 空文字として挿入される |
'null' | 小文字、囲みあり | null文字として挿入される |
'NULL' | 大文字、囲みあり | NULL文字として挿入される |
各パターンの動作例
以下に例を交えて説明します。
テーブルの作成
dbadmin=> create table tab1 (col1 varchar(5),col2 varchar(5));
CREATE TABLEブランク(囲みなし)
dbadmin=> INSERT INTO tab1 (col1,col2) VALUES('1',);
ERROR 4856: Syntax error at or near ")" at character 41
LINE 1: INSERT INTO tab1 (col1,col2) VALUES('1',); ★エラーになって挿入できないnull(小文字、囲みなし)
dbadmin=> INSERT INTO tab1 (col1,col2) VALUES('2',null);
OUTPUT
--------
1
(1 row)NULL(大文字、囲みなし)
dbadmin=> INSERT INTO tab1 (col1,col2) VALUES('3',NULL);
OUTPUT
--------
1
(1 row)”(ブランク、囲みあり)
dbadmin=> INSERT INTO tab1 (col1,col2) VALUES('4','');
OUTPUT
--------
1
(1 row)‘null’(小文字、囲みあり)
dbadmin=> INSERT INTO tab1 (col1,col2) VALUES('5','null');
OUTPUT
--------
1
(1 row)‘NULL’(大文字、囲みあり)
dbadmin=> INSERT INTO tab1 (col1,col2) VALUES('6','NULL');
OUTPUT
--------
1
(1 row)データの検索結果
dbadmin=> select * from tab1;
col1 | col2
------+------
2 |
3 |
4 |
5 | null
6 | NULL
(5 rows)
dbadmin=> select * from tab1 where col2 is null;
col1 | col2
------+------
2 | ★NULLとして認識される
3 | ★NULLとして認識される
(2 rows)
dbadmin=> select * from tab1 where col2 is not null;
col1 | col2
------+------
4 |
5 | null
6 | NULL
(3 rows)
dbadmin=> select col1,ifnull(col2,'NULLデータ') from tab1;
col1 | ifnull
------+------------
2 | NULLデータ ★NULLとして認識される
3 | NULLデータ ★NULLとして認識される
4 |
5 | null
6 | NULL
(5 rows)参考情報
NULLデータをロードする際の注意事項を以下の記事でご紹介しています。
あわせてご確認ください。
検証バージョンについて
この記事の内容はVertica 12.0で確認しています。
更新履歴
2023/06/21 Vertica12.0用に検証バージョンを修正
2015/04/23 本記事を公開