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