PostgreSQL11では...
次の4つのブールフィールドを持つ「person」テーブルがあります。
人 --------- ユーザー 従業員 サプライヤー 顧客
ここで、システム内の人のルールでフォーマットされたテキストをクエリで返したいと思います。例えば:
その人が単なる顧客である場合は、「customer」を返します。
がサプライヤーと顧客の場合、「サプライヤーと顧客」を返します。
が従業員、サプライヤー、および顧客の場合: '従業員、サプライヤー、および顧客'
まず、列を確認し、CASEを使用して対応するテキストを返します。次に、「concat_ws」関数を使用して、次のように、価値のあるものだけを取得しました。
SELECT
concat_ws(', ',
CASE WHEN user THEN 'user' END,
CASE WHEN employee THEN 'employee' END,
CASE WHEN supplier THEN 'supplier' END,
CASE WHEN customer THEN 'customer' END
) AS rules
FROM
person
結果: '顧客' 'サプライヤー、顧客'従業員、サプライヤー、顧客 '
これでほぼ結果が得られましたが、値が複数ある場合は、最後に「and」を連結する必要があります。
誰かが解決する方法やより友好的な方法を知っていますか?
1つの解決策は、式をでラップすることです。 regexp_replace()
regexp_replace(
concat_ws(', ',
CASE WHEN user THEN 'user' END,
CASE WHEN employee THEN 'employee' END,
CASE WHEN supplier THEN 'supplier' END,
CASE WHEN customer THEN 'customer' END
),
', (\w+)$',
'and \1'
)
コンマの最後のシーケンスのための正規表現検索では、可変語文字の数(およびキャプチャ、それ)が続くとに置き換えし、捕獲言葉が続きます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加