SQL クエリ結果カラムのカンマ区切り文字列へのステッチング法
背景 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をサポートしてくれることを願っています!.
関連
-
SQL Server テーブルパーティション削除の詳細
-
あるユーザーの連続ログイン日数を求めるSQLクエリ
-
SQL Server2017では、IPをサーバー名としてサーバーに接続します。
-
SQL SERVERのコミット・トランザクションのロールバック機構
-
SQL Server のジョブが失敗しました。所有者がサーバーアクセス権を持っているかどうか判断できない
-
SQLServerのエラーです。15404, unable to get information about Windows NT group/user WIN-8IVSNAQS8T7Administrator
-
SQL SERVERオープンCDC実践講座詳細
-
sql serverで最初の1000行のデータを削除する方法の例
-
データベース毎日練習問題、毎日少しづつ進歩(1)
-
データベース毎日練習問題、毎日少しづつ進歩(2)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SQL Server 2019 データベースバックアップ&リストアスクリプト(一括バックアップ)
-
SQLSERVER 変数文字列を用いたスプライシング ケース詳細
-
MySQLスレーブ遅延1列外部キーチェックとセルフインクリメントロック
-
SQL Server一括挿入データ事例詳細
-
SQLの書き方--行ごとの比較
-
リレーショナルデータベースと非リレーショナルデータベースの紹介
-
日付で年齢を判定するSQLサンプルコード 関数
-
SQLにアイドルCPU条件が定義されていないため、OnIdleジョブプランが機能しない
-
SQLサーバーのデータベースで、SAユーザーがロックされている問題を解決する
-
SQLステートメントにおけるNULL値の扱い方