問題:
特定の列のテキストから部分文字列を抽出したい。
例:
データベースには、web_address
id
列にデータがあります およびaddress
。 「www.
」を削除します 」の先頭と「.com
各address
の最後にある’ 。
id | アドレス |
---|---|
1 | www.example.com |
2 | www.google.com |
3 | www.learnsql.com |
ソリューション1:
最初の4文字を削除するには:
SELECT SUBSTR(address, 5, LENGTH(address) -4) AS substring FROM web_address;
最後の4文字を削除するには:
SELECT SUBSTR(address, 1, LENGTH(address) -4) AS substring FROM web_address;
最初の4文字と最後の4文字を削除するには:
SELECT SUBSTR(address, 5, LENGTH(address) -8) AS substring FROM web_address;
ソリューション2:
最初の4文字を削除するには:
SELECT SUBSTRING(address, 5, LENGTH(address)) AS substring FROM web_address;
最後の4文字を削除するには:
SELECT SUBSTRING(address, 1, LENGTH(address) -4) AS substring FROM web_address;
最初の4文字と最後の4文字を削除するには:
SELECT SUBSTRING(address, 5, LENGTH(address) -8) AS substring FROM web_address;
ソリューション3:
右から2番目の「。」の前のすべての文字を削除するには:
SELECT SUBSTRING_INDEX(address, '.', -2) AS substring FROM web_address;
左から2番目の「。」以降のすべての文字を削除するには:
SELECT SUBSTRING_INDEX(address, '.', 2) AS substring FROM web_address;
左から2番目の「。」の後のすべての文字を削除してから、右から最初の「。」の前のすべての文字を削除するには:
SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(address, '.', 2), '.', -1 ) AS substring FROM web_address;
結果は次のとおりです。
substring |
---|
例 |
learnsql |
ディスカッション:
最初の解決策と2番目の解決策はどちらも、SUBSTR()
を使用してテキストから指定された数の文字を削除します またはSUBSTRING()
働き。 SUBSTR()
SUBSTRING()
の同義語です 。どちらも引数として文字列と開始位置が必要です。抽出する文字数を定義する最後の引数はオプションです。最後の引数を省略すると、(開始点からの)文字列全体が返されます。
3番目のソリューションでは、SUBSTRING_INDEX()
関数は、指定された文字の前後のテキストを削除します。引数として、文字列、文字、およびテキスト抽出を開始する場所で検出される文字のインスタンスの数が必要です。