GROUP_CONCAT からCSVにする。

MySQL GROUP_CONCAT あるいは、PostgreSQLSTRING_AGG から、CSV1行を作る。
作ってSELECTした文字列は、先日書いた原始的なメソッド
CSV形式の1行分の文字列からList<String>への変換 - Oboe吹きプログラマの黙示録
を使って、List<String> を取得する。

任意の列で、GROUP BY して、GROUP_CONCAT / STRING_AGG で join する時に
RFC4180 準拠、カンマ区切り、ダブルクォーテーション括りにする。

MySQL の場合、、、

対象列が、NOT NULL制約がある場合、

CONCAT('"',
       GROUP_CONCAT(REGEXP_REPLACE(task_name, '"', '""')
                    ORDER BY create_date DESC 
                    SEPARATOR '","'),
       '"') AS task_name_csv

対象列が、NOT NULL制約がない場合、

CONCAT('"',
       GROUP_CONCAT(REGEXP_REPLACE(COALESCE(task_name, ''), '"', '""')
                    ORDER BY create_date DESC
                    SEPARATOR '","'),
       '"') AS task_name_csv

PostgreSQLの場合、、、

対象列が、NOT NULL制約がある場合、

'"' || STRING_AGG(REGEXP_REPLACE(task_name, '"', '""', 'g'), '","' ORDER BY create_date DESC)
    || '"' AS task_name_csv

対象列が、NOT NULL制約がない場合、

'"' || STRING_AGG(REGEXP_REPLACE(COALESCE(task_name, ''), '"', '""', 'g'), '","' ORDER BY create_date  DESC)
    || '"' AS task_name_csv

しかし、PostgreSQL には、列の型に、ARRAY型が存在するわけで、
PostgreSQL は、わざわざ、このようなことはしないで、ARRAY型にして SELECT すれば、
こんなCSVを生成した結果をSELECTで取り込んで、
先日書いたJavaのメソッドでリストにするなんてことをする必要性はない。

ARRAY_AGG(task_name ORDER BY create_date DESC)

あるいは、

ARRAY_AGG(COALESCE(task_name, '') ORDER BY create_date DESC)

GROUP_CONCAT結果をCSVにするなんて、MySQLだけしか有効性はないであろう。
=============================================================
ARRAY型で、思い起こせばこんなことを書いていた。。。
int[] → ArrayTypeHandler - Oboe吹きプログラマの黙示録
配列型に対するmybatis の TypeHandler よく使いそうなものを作った - Oboe吹きプログラマの黙示録
arraytypehandler · yipuran/yipuran-mybatis Wiki · GitHub