Oracle 空文字の扱いについて

Oracle 空文字の扱いについて

Oracleの空文字の扱いでハマってしまってしまいました。
TRIMをかけた値や「”」での判断についてまとめました。

空文字の比較

SELECT
   -----①-----
   CASE WHEN TRIM('A') <> ''
   THEN '1'
   ELSE '2'
   END,
   -----②-----
   CASE WHEN TRIM('A') IS NOT NULL
   THEN '1'
   ELSE '2'
   END
FROM DUAL

①は、空ではないと判断し「1」の結果が返ってくると思いきや、結果は「2」になります。
ORACLEでは「”」はNULLと判断されるようで、NULLではないため結果が「2」になってしまいます。

②のように値が入っているか判断するには「IS NOT NULL」で比較すれば結果が「1」になります。

空文字にTRIMをかけるとNULLになる

SELECT
   -----①-----
   CASE WHEN TRIM(' ') IS NULL
   THEN '1'
   ELSE '2'
   END
   -----②-----
   ,CASE WHEN TRIM(' ') = ''
   THEN '1'
   ELSE '2'
   END
FROM DUAL

空文字にTRIMをかけるとNULLになります。
①はNULLと判断され結果が「1」になります。
②はともにNULLとなり結果が「1」になると思いきや「2」になります。
ご注意ください。