MySQL の SUBSTRING_INDEX() で構造化された文字列パースのマスター
Lukas Schneider
DevOps Engineer · Leapcell

Key Takeaways
SUBSTRING_INDEX()
は、区切り文字の出現と方向に基づいてサブストリングを抽出します。- 正の
count
は先頭から、負のcount
は末尾から抽出します。 - SQLクエリでメール、URL、ファイル名の解析に役立ちます。
MySQLのSUBSTRING_INDEX()
関数は、指定された区切り文字とカウントに基づいて、大きな文字列からサブストリングを抽出するための強力なツールです。これは、URL、メールアドレス、ファイルパスなどの構造化された文字列を解析するのに特に役立ちます。
構文
SUBSTRING_INDEX(str, delimiter, count)
str
: サブストリングを抽出する元の文字列。delimiter
: 抽出の境界を定義する区切り文字文字列。count
: 区切り文字を検索する回数を示す整数。count
が正の場合、関数はstr
の先頭からdelimiter
のcount
番目の出現までのサブストリングを返します。count
が負の場合、str
の末尾からdelimiter
のcount
番目の出現までのサブストリングを返します。
例
1. 正のカウントでサブストリングを抽出する
SELECT SUBSTRING_INDEX('www.example.com', '.', 2); -- 出力: 'www.example'
このクエリは、文字列の先頭からピリオド(.
)の2回目の出現までのサブストリングを抽出し、'www.example'
になります。
2. 負のカウントでサブストリングを抽出する
SELECT SUBSTRING_INDEX('www.example.com', '.', -2); -- 出力: 'example.com'
ここでは、関数は文字列の末尾からピリオドの2回目の出現までのサブストリングを抽出し、'example.com'
になります。
3. メールアドレスからドメインを抽出する
SELECT SUBSTRING_INDEX('user@example.com', '@', -1); -- 出力: 'example.com'
この例は、@
記号を区切り文字として指定し、負のカウントを使用して、メールアドレスのドメイン部分を抽出する方法を示しています。
4. ファイル拡張子を抽出する
SELECT SUBSTRING_INDEX('report.final.pdf', '.', -1); -- 出力: 'pdf'
このクエリは、ピリオドを区切り文字として使用し、負のカウントを使用して、ファイル名からファイル拡張子'pdf'
を抽出します。
動作に関する注意点
- 指定された
delimiter
がstr
で見つからない場合、関数はstr
全体を返します。 count
がゼロの場合、関数は空の文字列を返します。count
の絶対値がstr
内のdelimiter
の出現回数を超える場合、関数はstr
全体を返します。
実用的なアプリケーション
SUBSTRING_INDEX()
関数は汎用性があり、さまざまなシナリオで適用できます。
- URLの解析: ドメイン名または特定のパスセグメントを抽出します。
- メールアドレスの処理: ユーザー名とドメインを分離します。
- ファイルパスの処理: ファイル名または拡張子を分離します。
- 区切り文字で区切られたデータの分析: 一貫した区切り文字を持つ文字列から特定のフィールドを抽出します。
他の関数との組み合わせ
より複雑な文字列操作のために、SUBSTRING_INDEX()
を他のMySQL文字列関数と組み合わせることができます。
REPLACE()
: 抽出されたサブストリングの一部を置換します。CONCAT()
: 追加の文字列を追加またはプリペンドします。LEFT()
/RIGHT()
: 抽出されたサブストリングをさらに絞り込みます。
たとえば、メールアドレスからユーザー名を抽出するには:
SELECT SUBSTRING_INDEX('user@example.com', '@', 1); -- 出力: 'user'
結論
SUBSTRING_INDEX()
関数は、文字列解析タスクにおいてMySQLの貴重な資産です。その構文と動作を理解することで、構造化されたデータから意味のあるサブストリングを効率的に抽出し、データ処理能力を高めることができます。
FAQs
はい、区切り文字が見つからない場合は、元の文字列全体を返します。
関数は空の文字列を返します。
いいえ、一貫した区切り文字を持つフラットな文字列に最適です。
Leapcellは、バックエンドプロジェクトをホストするための最良の選択肢です。
Leapcellは、Webホスティング、非同期タスク、およびRedisのための次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、または Rust で開発します。
無料で無制限のプロジェクトをデプロイ
- 使用量に対してのみ支払い - リクエストも料金もかかりません。
比類のないコスト効率
- アイドル料金なしの従量課金制。
- 例:25ドルで、平均応答時間60ミリ秒で694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実用的な洞察のためのリアルタイムのメトリックとログ。
容易なスケーラビリティと高パフォーマンス
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用上のオーバーヘッドはゼロ - 構築に集中するだけです。
詳細については、ドキュメントをご覧ください。
Xでフォローしてください:@LeapcellHQ