目次
空文字とNULLの扱い
Verticaでは、CHAR型やVARCHAR型の列に「空文字」や「NULL」をINSERTした場合、それぞれ結果が異なります。以下に6パターンのデータの挙動を整理してみます。
値 | 内容 | 挙動 |
---|---|---|
ブランク、囲みなし | 構文エラーにより、挿入できない | |
null | 小文字、囲みなし | NULLデータとして挿入される |
NULL | 大文字、囲みなし | NULLデータとして挿入される |
’’ | ブランク、囲みあり | 空文字として挿入される |
'null' | 小文字、囲みあり | null文字として挿入される |
'NULL' | 大文字、囲みあり | NULL文字として挿入される |
各パターンの動作例
以下に例を交えて説明します。テーブルの作成
1 2 |
dbadmin=> create table tab1 (col1 varchar(5),col2 varchar(5)); CREATE TABLE |
ブランク(囲みなし)
1 2 3 |
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(小文字、囲みなし)
1 2 3 4 5 |
dbadmin=> INSERT INTO tab1 (col1,col2) VALUES('2',null); OUTPUT -------- 1 (1 row) |
NULL(大文字、囲みなし)
1 2 3 4 5 |
dbadmin=> INSERT INTO tab1 (col1,col2) VALUES('3',NULL); OUTPUT -------- 1 (1 row) |
”(ブランク、囲みあり)
1 2 3 4 5 |
dbadmin=> INSERT INTO tab1 (col1,col2) VALUES('4',''); OUTPUT -------- 1 (1 row) |
‘null’(小文字、囲みあり)
1 2 3 4 5 |
dbadmin=> INSERT INTO tab1 (col1,col2) VALUES('5','null'); OUTPUT -------- 1 (1 row) |
‘NULL’(大文字、囲みあり)
1 2 3 4 5 |
dbadmin=> INSERT INTO tab1 (col1,col2) VALUES('6','NULL'); OUTPUT -------- 1 (1 row) |
データの検索結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
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データをロードする際の注意事項を以下の記事でご紹介しています。あわせてご確認ください。
NULLデータロード時の注意事項
検証バージョンについて
この記事の内容はVertica 12.0で確認しています。更新履歴
2023/06/21 Vertica12.0用に検証バージョンを修正2015/04/23 本記事を公開