WHERE句の空白が想定したとおり絞込条件にならない
いろいろと謎な仕様にぶつかるDB2。
WHEREで空白の数が無視されるというか、そんな挙動にぶつかってなんだかなぁ、な感じ(;´∀`)
CREATE TABLE TESTTABLE1 ( COL1 CHAR(10) DEFAULT '△', COL2 VARCHAR(10) DEFAULT '△')
CHARとVARCHARの列を作り、デフォルトを空白1個に指定しておきます。
(わかりづらいので、空白文字を△で書いてます。)
INSERT INTO TESTTABLE1(COL1) VALUES('ABCDE') INSERT INTO TESTTABLE1(COL2) VALUES('ABCDE') INSERT INTO TESTTABLE1(COL1, COL2) VALUES('△△△△△△', 'KKKKKKK') INSERT INTO TESTTABLE1(COL1, COL2) VALUES('BBBBBBBB','△△△△△△')列の値を指定しなかった場合、DEFAULTの値が入ってくるはずですね。
db2 => SELECT * FROM TESTTABLE1 WHERE COL1 IS NULL COL1 COL2 ---------- ---------- 0 レコードが選択されました。 db2 => SELECT * FROM TESTTABLE1 WHERE COL2 IS NULL COL1 COL2 ---------- ---------- 0 レコードが選択されました。という風に、確かにIS NULLでは引っかからなくなります。
もちろん、空白文字でWHEREすればヒットします。
db2 => SELECT * FROM TESTTABLE1 WHERE COL1 = '△' COL1 COL2 ---------- ---------- ABCDE 1 レコードが選択されました。 db2 => SELECT * FROM TESTTABLE1 WHERE COL2 = '△' COL1 COL2 ---------- ---------- ABCDE 1 レコードが選択されました。まあ、ここまでは想定した通り。
なんですが、ここで、空白文字複数で検索してみると
db2 => SELECT * FROM TESTTABLE1 WHERE COL1 = '△△△△△△' COL1 COL2 ---------- ---------- ABCDE KKKKKKK db2 => SELECT * FROM TESTTABLE1 WHERE COL2 = '△△△△△△' COL1 COL2 ---------- ---------- ABCDE BBBBBBBBええええええ ('A`)