OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

空文字データとNULLデータINSERT時の差異

公開日:
更新日:
アーキテクチャ
データロード
#NULL

空文字と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データをロードする際の注意事項を以下の記事でご紹介しています。
あわせてご確認ください。

NULLデータロード時の注意事項

検証バージョンについて

この記事の内容はVertica 12.0で確認しています。

更新履歴

2023/06/21 Vertica12.0用に検証バージョンを修正
2015/04/23 本記事を公開