tabimoba.net

とあるエンジニアの雑記帳

LISTAGG関数の戻り値がUNICODE文字列となる問題とその対応

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;

参考