前回の記事では、MySQL の置換関数 (Replace) とセグメンテーション関数 (SubString) を紹介しました。今日は、MySQL のプロフェッショナルな「文字列連結」関数である concat について見てみましょう。いつものように、何か良い提案やアイデアがあれば、コメント欄に書き込んでください。仕事がサボっているときに、その経験を皆さんと共有します〜 1. concat関数のいくつかの使い方 1-1. 関数: concat(str1,str2,…) concat関数は、通常、SELECTクエリ構文で返されるフィールドの内容を変更するために使用されます。たとえば、次のようなLOLヒーロー情報テーブルがあります。 mysql> `LOL` から * を選択します。 +----+---------------+--------------+-------+ | id | ヒーロータイトル | ヒーロー名 | 価格 | +----+---------------+--------------+-------+ | 1 | DBlade Shadow | タロン | 6300 | | 2 | X-Swift スカウト | ティーモ | 6300 | | 3 | G ラディアント レディ | ルクス | 1350 | | 4 | F クロックワークスピリット | オリアナ | 6300 | | 5 | Z 覇道拳 | リー・シン | 6300 | | 6 | W: ブレードマスター | 簡単 | 450 | | 7 | J 俊足の剣士 | ヤスオ | 450 | +----+---------------+--------------+-------+ セット内の行数は 7 です (0.00 秒) 列を返す必要があります: ヒーローのタイトル - ヒーローの名前データ。ここで、次のように concat 関数が使用されます。 `LOL` から CONCAT(hero_title,' - ',hero_name) を full_name, price として選択します。 mysql> SELECT CONCAT(hero_title,' - ',hero_name) as full_name, price from `LOL`; +------------------------------+-------+ | フルネーム | 価格 | +------------------------------+-------+ | DBlade Shadow - Talon | 6300 | | X-Swift スカウト - ティーモ | 6300 | | G ラディアント レディ - ルクス | 1350 | | F クロックワークスピリット - オリアナ | 6300 | | Z 覇道拳 - リー・シン | 6300 | | W 五覚剣勝 - 簡単 | 450 | | J 速攻剣士 - ヤスオ | 450 | +------------------------------+-------+ セット内の行数は 7 です (0.00 秒) 結合されたパラメータに NULL がある場合は、次のように NULL が返されます。 `LOL` から、CONCAT(hero_title,NULL,hero_name) を full_name、price として選択します。 mysql> SELECT CONCAT(hero_title,'NULL',hero_name) as full_name, price from `LOL`; +---------------------------------+-------+ | フルネーム | 価格 | +---------------------------------+-------+ | DBlade Shadow NULLTalon | 6300 | | X-Swift スカウト NULL ティーモ | 6300 | | G ラディアントレディ NULL ルクス | 1350 | | F クロックワークスピリット NULL オリアナ | 6300 | | Z 覇道拳 NULL リー・シン | 6300 | | W NULL イ | 450 | | J 速剣の達人 NULL ヤスオ | 450 | +---------------------------------+-------+ セット内の行数は 7 です (0.00 秒) 申し訳ありませんが、上記は私の弟が書いたもので、正しいのは次の通りです。 mysql> SELECT CONCAT(hero_title,NULL,hero_name) as full_name, price from `LOL`; +-----------+------+ | フルネーム | 価格 | +-----------+------+ | NULL | 6300 | | NULL | 6300 | | NULL | 1350 | | NULL | 6300 | | NULL | 6300 | | NULL | 450 | | NULL | 450 | +-----------+------+ セット内の行数は 7 です (0.00 秒) 1-2. 関数: concat_ws(separator,str1,str2,…) CONCAT_WS() 関数の完全な名前: CONCAT With Separator。これは CONCAT() の特殊な形式です。最初のパラメータ (セパレータ) は、他のパラメータのセパレータです。区切り文字の位置は、連結される 2 つの文字列の間にあります。 以下の点に注意してください。
さて、上記の LOL テーブルを引き続き使用し、フィールドを連結して、カンマで区切ります。 `LOL` から、full_name、price として concat_ws(',',hero_title,hero_name,price) を選択します。 mysql> `LOL` から、concat_ws(',',hero_title,hero_name,price) を full_name、price として選択します。 +---------------------------------+-------+ | フルネーム | 価格 | +---------------------------------+-------+ | DBlade Shadow、Talon、6300 | 6300 | | X-Swift Scout、ティーモ、6300 | 6300 | | G ラディアント レディ、ルクス、1350 | 1350 | | F クロックワークスピリット、オリアナ、6300 | 6300 | | Z 覇道拳 リー・シン 6300 | 6300 | | W ウージュー ソードマスター、簡単、450 | 450 | | J 俊足の剣士、ヤスオ、450 | 450 | +---------------------------------+-------+ セット内の行数は 7 です (0.00 秒) 区切り文字の後の連結パラメータが NULL の場合、次のように直接無視され、全体の結果には影響しません。 `LOL` から、full_name、price として concat_ws(',',hero_title,NULL,hero_name) を選択します。 mysql> `LOL` から、concat_ws(',',hero_title,NULL,hero_name) を full_name、price として選択します。 +----------------------------+-------+ | フルネーム | 価格 | +----------------------------+-------+ | DBlade Shadow、Talon | 6300 | | X-Swift スカウト、ティーモ | 6300 | | G ラディアントレディ、ルクス | 1350 | | F 時計仕掛けの精霊 オリアナ | 6300 | | Z 覇道拳 リー・シン | 6300 | | W ウージュー ソードマスター、簡単 | 450 | | J 俊足の剣士 ヤスオ | 450 | +----------------------------+-------+ セット内の行数は 7 です (0.00 秒) 区切り文字が NULL の場合、結果は次のように NULL を返します。 `LOL` から、full_name、price として concat_ws(NULL、hero_title、hero_name、price) を選択します。 mysql> `LOL` から、concat_ws(NULL、hero_title、hero_name、price) を full_name、price として選択します。 +-----------+------+ | フルネーム | 価格 | +-----------+------+ | NULL | 6300 | | NULL | 6300 | | NULL | 1350 | | NULL | 6300 | | NULL | 6300 | | NULL | 450 | | NULL | 450 | +-----------+------+ セット内の行数は 7 です (0.00 秒) 1-3. 関数: group_concat(expr) group_concat ( [DISTINCT] フィールド名 [ソートフィールドによる順序 ASC/DESC] [区切り文字 'separator'] ) group_concat 関数は通常、group by を含むクエリ ステートメントで使用されます。group_concat は通常、クエリの戻り結果フィールドに含まれます。 group_concat 関数の式は複雑に見えますか?上記の式を見てみましょう。括弧 [] はオプションであり、使用できるかどうかを示します。
さて、楽しいテスト段階に入りましょう。この LOL テーブルをもう一度使用してみましょう。理由は聞かないでください。これが青春なのかもしれない! 5人チームで一晩中プレイしていた年、ビッグドラゴンの戦いの最中にインターネットカフェの停電があったことを今でも覚えています... また話題から外れました。 。すみません。 mysql> `LOL` から * を選択します。 +----+---------------+--------------+-------+ | id | ヒーロータイトル | ヒーロー名 | 価格 | +----+---------------+--------------+-------+ | 1 | DBlade Shadow | タロン | 6300 | | 2 | X-Swift スカウト | ティーモ | 6300 | | 3 | G ラディアント レディ | ルクス | 1350 | | 4 | F クロックワークスピリット | オリアナ | 6300 | | 5 | Z 覇道拳 | リー・シン | 6300 | | 6 | W: ブレードマスター | 簡単 | 450 | | 7 | J 速攻剣豪 | ヤスオ | 450 | +----+---------------+--------------+-------+ セット内の行数は 7 です (0.00 秒) たとえば、異なる価格帯のヒーローを区別する必要があります。group_concat を使用しない場合は、それらを区別するために order by を使用する必要がある場合があります。 `LOL` から * を選択し、価格の降順で並べ替えます。 mysql> select * from `LOL` order by price desc; +----+---------------+---------------+-------+ | id | ヒーロータイトル | ヒーロー名 | 価格 | +----+---------------+--------------+-------+ | 1 | DBlade Shadow | タロン | 6300 | | 2 | X-Swift スカウト | ティーモ | 6300 | | 4 | F クロックワークスピリット | オリアナ | 6300 | | 5 | Z 覇道拳 | リー・シン | 6300 | | 3 | G ラディアント レディ | ルクス | 1350 | | 6 | W: ブレードマスター | 簡単 | 450 | | 7 | J 速攻剣豪 | ヤスオ | 450 | +----+---------------+--------------+-------+ セット内の行数は 7 です (0.00 秒) しかし、これはあまり直感的ではありません。すべての行を確認したいのですが、どうすればよいでしょうか? SELECT GROUP_CONCAT(hero_title,' - ',hero_name Separator ',' ) as full_name, price `LOL` から GROUP BY price ORDER BY price desc; 現時点では、GROUP_CONCAT 関数を使用すると、この問題を簡単に解決できます。見て、気持ちいいでしょう? 注: ここでは、3 つのパラメータ (hero_title、' - '、hero_name) を連結し、区切り文字を ',' に設定し、価格でグループ化し、価格で並べ替えます。効果は以下のとおりです mysql> SELECT GROUP_CONCAT(hero_title,' - ',hero_name Separator ',' ) as full_name, price from `LOL` GROUP BY price ORDER BY price desc; +------------------------------------------------------------------------+-------+ | フルネーム | 価格 | +------------------------------------------------------------------------+-------+ | D ブレードシャドウ - タロン、X スウィフトスカウト - ティーモ、F クロックワーク - オリアナ、Z ハイフィスト - リー・シン | 6300 | | G ラディアント レディ - ルクス | 1350 | | W 五覚剣聖 - イー、J 速剣士 - ヤスオ | 450 | +------------------------------------------------------------------------+-------+ セット内の 3 行 (0.00 秒) 価格を小さいものから大きいものの順に並べ替える場合は、次のように外側の ORDER BY を制御するだけで済みます。 SELECT GROUP_CONCAT(hero_title,' - ',hero_name Separator ',' ) as full_name, price `LOL` から GROUP BY price ORDER BY price asc; mysql> SELECT GROUP_CONCAT(hero_title,' - ',hero_name Separator ',' ) as full_name, price from `LOL` GROUP BY price ORDER BY price asc; +--------------------------------------------------------------------------+-------+ | フルネーム | 価格 | +--------------------------------------------------------------------------+-------+ | W 五覚剣聖 - イー、J 速剣士 - ヤスオ | 450 | | G ラディアント レディ - ルクス | 1350 | | D ブレードシャドウ - タロン、X スウィフトスカウト - ティーモ、F クロックワーク - オリアナ、Z ハイフィスト - リー・シン | 6300 | +--------------------------------------------------------------------------+-------+ セット内の 3 行 (0.00 秒) では、GROUP_CONCAT 関数で order by ソートをどのように使用するのでしょうか?次のように、hero_title に従ってソートやスプライシングなど、スプライシングされたフィールドをソートするために使用されます。 SELECT GROUP_CONCAT(hero_title,' - ',hero_name order by hero_title Separator ',' ) as full_name, price from `LOL` GROUP BY price ORDER BY price asc; mysql> SELECT GROUP_CONCAT(hero_title,' - ',hero_name order by hero_title Separator ',' ) as full_name, price from `LOL` GROUP BY price ORDER BY price asc; +--------------------------------------------------------------------------+-------+ | フルネーム | 価格 | +--------------------------------------------------------------------------+-------+ | J スイフトブレードマスター - ヤスオ、W インフィニティブレードマスター - イー | 450 | | G ラディアント レディ - ルクス | 1350 | | D 刃の影 - タロン、F 機械仕掛けの精霊 - オリアナ、X 素早い偵察 - ティーモ、Z 至高の拳 - リー・シン | 6300 | +--------------------------------------------------------------------------+-------+ セット内の 3 行 (0.00 秒) さて、MySQL の concat 関数は依然として非常に便利であることがわかります。同様のニーズや混乱が生じたときに、ぜひご検討ください。あるいは、このブログを見つけて、それが役に立つかもしれません! MySQL 連結関数 CONCAT の使い方の詳しい説明はこれで終わりです。MySQL 連結関数 CONCAT に関するその他の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: HTMLのテーブルの内容は中央に水平と垂直に表示されます
>>: Dockerコンテナでユーザーを切り替えるときに権限が不足する問題を解決する方法
コード効果を異なるブラウザで表示することはよくあることなので、異なるショートカットキーを使用して対応...
簡略化されたファイル サイズを変更し、サンプルをダウンロードします。ファイルをローカル コンピュータ...
いくつかの Qt インターフェース プログラムを作成しましたが、Qt 環境がインストールされていない...
1. 対応するNode.jsパッケージを見つけます。https://nodejs.org/downl...
序文:データベースのバックアップの重要性は、特にデータの損失が深刻な結果を招く可能性がある実稼働環境...
Nginx (エンジン x) は、IMAP/POP3/SMTP サービスも提供する高性能 HTTP ...
この記事では、jQuery キャンバスを使用して QR コード付きのポスターを生成するための具体的な...
この記事では、docker 経由で Jenkins+Maven+SVN+Tomcat をデプロイし、...
まず、フォントアイコンとは何でしょうか?表面的にはアイコンですが、実際はテキストです。テキストの設定...
HTML ボタン自体を中央に配置するにはどうすればよいでしょうか? このアイデアは簡単に見つかります...
1 MySQL5.6 1.1 関連パラメータMySQL 5.6 では、innodb_undo_dir...
出典: www.bamagazine.comウェブページのバナー、ニュースの見出しの周りのスペース、...
では、早速コードを見てみましょう。 1. 上部、中央、下部のレイアウト: <!DOCTYPE ...
Dockerfile を使用したイメージのカスタマイズイメージのカスタマイズとは、実際には各レイヤー...
目次ブロックレベル関数オブジェクトのプロトタイプを直接変更すると呼び出された人発信者評価ブロックレベ...