問題:
文字列の列があり、それらから部分文字列を取得したいと考えています。
例1:
emails
テーブルには、メールの列があります。各メールの最初の7文字を表示したい。
表は次のようになります:
メール |
---|
[email protected] |
[email protected] |
[email protected] |
[email protected] |
ソリューション1:
SELECT email, SUBSTR(email, 1, 7) AS substring FROM emails;
結果は次のとおりです。
メール | 部分文字列 |
---|---|
[email protected] | jake99 @ |
[email protected] | タマラブ |
[email protected] | notine @ |
[email protected] | ジェシカ |
ディスカッション:
SUBSTR()
を使用する 働き。最初の引数は文字列または列名です。 2番目の引数は、部分文字列を開始する文字のインデックスです。 3番目の引数は部分文字列の長さです。
気を付けて!他のプログラミング言語とは異なり、インデックスは1から始まります 、0ではありません。これは、最初の文字のインデックスが1、2番目の文字のインデックスが2などであることを意味します。
>SUBSTR(email, 1, 7) メール列の値のサブストリングを返します。最初の文字から始まり、7文字になります。
例2:
インデックス2と6の間の部分文字列を表示したい。
ソリューション2:
SELECT email, SUBSTR(email, 2, 5) AS substring FROM emails;
結果は次のとおりです。
メール | 部分文字列 |
---|---|
[email protected] | ake99 |
[email protected] | アマラ |
[email protected] | otine |
[email protected] | エッシック |
ディスカッション:
SUBSTR()
を使用します 前の例と同じように機能します。今回は、インデックス2から開始するため、関数の2番目の引数は2です。サブストリングの長さは5(end_index - start_index + 1
)です。 。
例3:
@記号で始まり、文字列の最後で終わる部分文字列を表示したいのですが、正確なインデックスまたは長さがわかりません。
ソリューション3:
SELECT email, SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(email, '@') + 1) AS substring FROM emails;
結果は次のとおりです。
メール | 部分文字列 |
---|---|
[email protected] | @gmail.com |
[email protected] | @zoho.com |
[email protected] | @ yahoo.fr |
[email protected] | @ onet.pl |
ディスカッション:
SUBSTR()
を使用します 前の例と同じように機能します。今回は、行ごとに位置が異なる特定のキャラクターを探しています。特定の文字のインデックスを見つけるには、INSTR(column, character)
を使用できます。 関数。ここで、columnはリテラル文字列またはサブ文字列を取得する列であり、characterはcharacter
です。 サブストリングを開始する場所(ここでは、@
。
SUBSTR()
の3番目の引数 関数は部分文字列の長さです。 INSTR()
を使用して計算できます およびLENGTH()
関数。これを行うには、列の長さからインデックスを減算してから1を加算します。
LENGTH(email) - INSTR(email, '@') + 1
文字列の最後ではなく、特定の文字(たとえば、「。」の前)で終わる部分文字列を取得することもできます。これを行う方法は次のとおりです。
SELECT email, SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(email, '@')) AS substring FROM emails;
このクエリの結果は次のとおりです。
メール | 部分文字列 |
---|---|
[email protected] | @gmail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
パーツINSTR(email, '.') - INSTR(email, '@')
部分文字列の長さを計算するだけです。