1. ホーム
  2. データベース
  3. エムエスエル

SQL クエリ結果カラムのカンマ区切り文字列へのステッチング法

2022-01-06 07:04:32

背景 SQLクエリの結果を文字列につなぎ合わせる必要があることがよくあります。

回避策 group_concat関数を使用することで

ステッチ結果が非常に長くなり、ステッチ結果の表示が不完全になりますが、以下の方法で解決できます。

各クエリの前にSET SESSION group_concat_max_len = 10240を実行します。

またはSET GLOBAL group_concat_max_len = 10240です。

クエリ結果の値をより大きくします。

追記:SQLサーバーのスプライスSQLは以下の通りです。

selectstuff(( select ','+ requestid from nccombinedpayment for xml path('')),1,1,'') as requestid ;

機能メソッドの追加。

使用した例は、すべて次のデータベース・テーブルtt2の下で実行されています。

I. concat() 関数

1. 機能 機能: 複数の文字列を1つの文字列に結合する。

2. 構文:concat(str1, str2, ...)

引数を連結した文字列として結果を返すか、引数のいずれかがNULLの場合はNULLを返す。

3. 例

例1. select concat (id, name, score) as info from tt2;

<イグ

tt2テーブルにnullのスコア値を持つ行があるため、真ん中の行はnullとなります。

例2:例1の結果のid、name、scoreの3つのフィールドの組み合わせには区切り文字がないので、カンマを区切り文字として追加することができる。

これでだいぶスムーズに見えるようになりましたね~~。

ただ、sql文の入力が面倒で、3フィールドならカンマを2回、10フィールドならカンマを9回入力しなければならない...。何か簡単な方法はないものでしょうか。--そこで、パラメータ間のセパレータを指定する concat_ws() の登場です!

次に、concat_ws()関数です。

1. 機能 concat()と同じで、複数の文字列を1つの文字列に連結するが、セパレータを一度に指定できる〜(concat_wsはセパレータ付きconcat)。

2. 構文:concat_ws(separator, str1, str2, ...)

説明 最初のパラメータはセパレータを指定する。セパレータはNULLではありえないことに注意。

3. 例

例3:concat_ws()でセパレータをカンマで指定して、例2と同じ効果を得ています。

例4:セパレータをNULLで指定すると、すべてNULLになる:。

III. group_concat()関数

前置きが長くなりました。group by を使ったクエリ文では、select で指定されたフィールドは group by 文の後にグループ化の基準として含まれるか、集約関数に含まれます。(group byの詳細については、A Brief Look at Using Group By in SQLを参照してください)。

例5.

この例では、同じ名前の人々の最小のIDを照会しています。同じ名前の人々のすべてのIDを照会したい場合はどうすればよいのでしょうか。

もちろん、このようなクエリも可能です。

例6.

しかし、このように同じ名前が複数回表示されるのは、とても直感的でないように見えます。それぞれの名前を一度だけ表示させ、なおかつ同じ名前を持つすべての人のIDを表示させる、より直感的な方法はないでしょうか?--group_concat() を使って

1. 機能 機能: group byで生成された同じグループ内の値を連結し、文字列の結果を返す。

2. 構文: group_concat( [distinct] joinするフィールド [order by sorted fields asc/desc] [separator 'separator'] )

説明 結果の値をソートしたい場合は、order by 節を使用します。separator は文字列値で、デフォルトはカンマです。

3. 例

例7:group_concat()とgroup byを使って、同姓同名の人のid番号を表示する。

例 8: 上記の id 番号を大きいものから小さいものへ並べ替え、'_' を区切り文字として使用します。

例9: 上記のクエリは、名前によってグループ化された各グループのすべてのIDを表示します。次に、名前によってグループ化されたすべてのグループのIDとスコアをクエリしたいと思います。

この記事は、SQLクエリ結果列のカンマ区切り文字列へのスプライシングについてのすべてです、より関連するSQLカンマ区切り文字列の内容は、Script Houseの以前の記事を検索してくださいまたは、次の関連記事を閲覧し続けるあなたが将来的にもっとScript Houseをサポートしてくれることを願っています!.