SQL ServerではNULLと空文字('')を区別するらしい。例を追って検証してみる。
検証
以下のテーブル「猫マスタ」があったとする。
ID |
名前 |
カリカリ |
111 |
すだち |
シーバ |
222 |
ちろこ |
フリスキー |
333 |
ごん |
モンプチ |
これをそれぞれNULLと空文字('')、半角スペース1桁で更新する。
UPDATE 猫マスタ SET カリカリ = NULL WHERE ID = 111
UPDATE 猫マスタ SET カリカリ = '' WHERE ID = 222
UPDATE 猫マスタ SET カリカリ = ' ' WHERE ID = 333
ID |
名前 |
カリカリ |
111 |
すだち |
|
222 |
ちろこ |
|
333 |
ごん |
|
いずれも見た目はNULLのように見える。
しかし実際はNULLと空文字は内部で区別されている。
SELECT * FROM 猫マスタ WHERE カリカリ IS NULL
SELECT * FROM 猫マスタ WHERE カリカリ = ''
さらにスペース値に対するRTRIM,LTRIM関数は空文字になるので注意。
SELECT * FROM 猫マスタ WHERE RTRIM(カリカリ) IS NULL
SELECT * FROM 猫マスタ WHERE RTRIM(カリカリ) = ''
ID |
名前 |
カリカリ |
222 |
ちろこ |
|
333 |
ごん |
|
補足
空文字('')はSPACE関数でも表現できる。
SELECT * FROM 猫マスタ WHERE カリカリ = SPACE(0)