OracleのLISTAGG関数の戻り値が、以下のように半角スペースが含まれるように見える文字列、あるいはUNICODE文字列(エンコーディングされた文字列)となる場合があります。
SELECT LISTAGG(HOGEFIELD, ',') WITHIN GROUP (ORDER BY HOGEFIELD) FROM HOGETBL WHERE HOGEGRPID = 1;
山 田 , 佐 藤 , 田 中
原因
NVARCHAR2型のフィールドでLISTAGG関数を使用すると当該問題が発生します。 (LISTAGG関数の戻り値はVARCHAR2型であるため)
対応
LISTAGG関数の第1引数を次のようにセットし、AL16UTF16 -> UTF8へ文字コードを変換します。
SELECT LISTAGG(convert(HOGEFIELD,'UTF8', 'AL16UTF16'), ',') WITHIN GROUP (ORDER BY HOGEFIELD) FROM HOGETBL WHERE HOGEGRPID = 1;
参考
- listagg data to useable format?
- https://stackoverflow.com/questions/28812445/listagg-data-to-useable-format