SQL Server の Substring() 関数:使用例付き
⚡ スマートサマリー
SQL Server の SUBSTRING() 関数の例tracts は文字、テキスト、またはバイナリ式の一部で、選択した開始位置から指定された数の文字を返します。区切り文字ベースの解析には CHARINDEX と自然に組み合わせることができます。

サブストリング()とは何ですか?
SUBSTRING() は関数です SQL ユーザーが必要に応じて任意の文字列から部分文字列を抽出できるようにする関数です。SUBSTRING() 例tracSUBSTRING() は、入力文字列内の指定された位置から始まる、指定された長さの文字列を返します。SQL の SUBSTRING() の目的は、文字列の特定の部分を返すことです。
Substring() の構文
SUBSTRING(Expression, Starting Position, Total Length)
ここに:
- SUBSTRING() 式 SQLサーバー は任意の文字、バイナリ、テキスト、または画像を指定できます。式は、部分文字列を取得する元の文字列です。
- 開始位置は、式の中で新しい部分文字列の開始位置を決定します。
- 合計長さは、開始位置から始まる、式から得られる部分文字列の予想される全長です。
SUBSTRING() の使用規則
- MS SQLのSUBSTRING()関数では、3つの引数はすべて必須です。
- 開始位置が式の最大文字数を超える場合、SQL Server の SUBSTRING() 関数は何も返しません。
- 合計長は、元の文字列の最大文字数を超える場合があります。この場合、生成される部分文字列は、式の開始位置から式の最後の文字までの文字列全体になります。
以下の図は、SQL ServerにおけるSUBSTRING()関数の使用方法を示しています。
T-SQL 部分文字列の例
前提: ' という名前のテーブルがあると仮定しますGuru99' は、以下に示すように、2 列 4 行で構成されます。Guru以下の例における99'表:
クエリ1: SQL の SUBSTRING() 関数で、式の最大長よりも短い長さの文字列を取得する。
SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;
結果:下の図は、「Tutorial_name」列の部分文字列を「SUB」列として表示しています。開始位置は1、長さは2なので、最初の2文字が返されます。
クエリ2: SQL Server の SUBSTRING() 関数で、式の最大長を超える長さの文字列を返す方法。
SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;
結果:以下の図は、「Tutorial_name」列の部分文字列を「SUB」列として表示しています。部分文字列の長さが式の最大長を超えていますが、エラーは発生せず、クエリは開始位置から先まで文字列全体を返します。
SQL Server で CHARINDEX を使用した SUBSTRING
SUBSTRING() の実際の使用例としては、trac区切り文字の前後にあるテキスト(メールアドレスのドメインなど)を取得します。SUBSTRING() 関数は、開始位置を固定する必要がありますが、区切り文字の位置は行ごとに異なります。CHARINDEX() 関数は、文字列内の文字の位置を返すことでこの問題を解決します。
CHARINDEX(substring_to_find, expression [, start_location])
SUBSTRING() の中に CHARINDEX() をネストすることで、開始位置が動的になります。以下の例では、 @ シンボルを呼び出し、その後のすべてを返します。 変数 サンプル値を保持します。
DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com'; SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;
ここで、CHARINDEX('@', @Email) は @ 記号の位置を特定し、1 を加算してその先へ移動し、SUBSTRING() でその位置を特定します。trac残りの文字をtsします。上記の値の場合、クエリはドメインを返します。 ぐる99.comこのCHARINDEXとSUBSTRINGを組み合わせたパターンは、T-SQLで構造化文字列を解析する標準的な方法です。
SQL ServerにおけるSUBSTRINGとLEFTおよびRIGHTの違い
SQL Serverには、文字列の先頭または末尾から文字を抽出するLEFT()関数とRIGHT()関数も用意されています。これらは記述が簡潔ですが、両端に限定されます。SUBSTRING()関数は任意の位置から開始できるため、最も柔軟性があります。以下の表で、これらの関数を比較します。
| 演算 | Arguments | Extracからのts | 同等のSUBSTRING() |
| LEFT(式, n) | 2 | 文字列の先頭 | SUBSTRING(式, 1, n) |
| RIGHT(式, n) | 2 | 文字列の終わり | SUBSTRING(式, LEN(式) – n + 1, n) |
| SUBSTRING(式、開始位置、長さ) | 3 | 任意の位置 | 適用されない |
つまり、LEFT() と RIGHT() は文字列の末尾を指定するための便利なショートカットであり、SUBSTRING() は文字列の中央から取得した文字も含めた一般的なケースを処理します。
SUBSTRING関数における負の値、ゼロ、NULL引数
基本的なルールに加えて、SUBSTRING() 関数が端でどのように動作するかを知っておくと役立ちます。開始位置がゼロまたは負の場合、SQL Server は (開始位置 + 長さ - 1) の実効長を計算し、位置 1 から読み取りを開始します。引数のいずれかが NULL の場合、結果は NULL になります。以下の表は、公式の SUBSTRING (Transact-SQL) 参考資料には、以下の事例が示されています。
| コール | 結果 | 理由 |
| SUBSTRING('Guru99'、1、4) | Guru | 通常の呼び出し:1文字目から4文字。 |
| SUBSTRING('Guru99'、0、3) | Gu | 1未満から始めます: 有効長さは 0 + 3 – 1 = 2 です。 |
| SUBSTRING('Guru99'、4、100) | u99 | 文字列の長さを超えた場合は、残りの部分をエラーなく返します。 |
| SUBSTRING('Guru99'、3、NULL) | NULL | NULL引数を指定すると、結果全体がNULLになります。 |
これらのエッジケースを知っておくと、開始位置が別の列から計算されたり、 変数 それはゼロまたはNULLになる可能性があります。




