SQL Server の Substring() 関数:使用例付き

⚡ スマートサマリー

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

  • ✂️ 目的: SUBSTRING() 関数は、指定された式、開始位置、および長さに基づいて、文字列の特定の部分を返します。
  • 🔢 3つの論点: SQL ServerのSUBSTRING()関数では、式、開始位置、および全長はすべて必須です。
  • 📍 1を基準とした指数: 開始位置は1から始まるため、最初の文字が位置1としてカウントされ、1文字ずれるミスを防ぎます。
  • 🔎 CHARINDEXを使用: SUBSTRING() と CHARINDEX() を組み合わせると、区切り文字と例外が見つかります。tracその前後のテキストです。
  • ↔️ 左と右の比較: LEFT() や RIGHT() とは異なり、SUBSTRING() はtracts文字は、端だけでなく、どの位置からでも使用できます。
  • ⚠️ エッジケース: 長さがNULLの場合はNULLが返され、文字列の長さを超える場合はエラーを発生させずに残りの部分が返されます。

SQL Server の SUBSTRING() 関数と T-SQL の例

サブストリング()とは何ですか?

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()関数の使用方法を示しています。

SUBSTRING() 関数の使い方を示す図trac指定された長さの開始位置からts文字

T-SQL 部分文字列の例

前提: ' という名前のテーブルがあると仮定しますGuru99' は、以下に示すように、2 列 4 行で構成されます。Guru以下の例における99'表:

GuruSUBSTRINGの例で使用されているTutorial_IDとTutorial_name列を含む99個のサンプルテーブル

クエリ1: SQL の SUBSTRING() 関数で、式の最大長よりも短い長さの文字列を取得する。

SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;

結果:下の図は、「Tutorial_name」列の部分文字列を「SUB」列として表示しています。開始位置は1、長さは2なので、最初の2文字が返されます。

結果グリッドは、SUB列としてTutorial_nameの最初の2文字を返します。

クエリ2: SQL Server の SUBSTRING() 関数で、式の最大長を超える長さの文字列を返す方法。

SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;

結果:以下の図は、「Tutorial_name」列の部分文字列を「SUB」列として表示しています。部分文字列の長さが式の最大長を超えていますが、エラーは発生せず、クエリは開始位置から先まで文字列全体を返します。

要求された長さが文字列を超えた場合、結果グリッドは Tutorial_name の残りの部分を返します。

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になる可能性があります。

よくあるご質問

SQL Server は SUBSTRING() を使用します。SUBSTR() は、 Oracle (NAIST) と MySQLどちらも文字列の一部を返しますが、SUBSTRING() は標準の Transact-SQL 関数であるため、SUBSTR() は SQL Server では実行されません。

はい。SUBSTRING() は値を返すため、WHERE、SELECT、ORDER BY 句で使用できます。SUBSTRING() によるフィルタリングは通常インデックスシークを回避するため、プレフィックス検索では LIKE パターンの方が高速な場合が多くあります。

はい、ただしSQL Serverはまず値を文字列に変換します。これは暗黙的に行われる場合もあれば、CAST関数やCONVERT関数によって行われる場合もあります。開始位置と長さは文字数をカウントするもので、数字や日付の要素数はカウントされないため、値の書式設定には注意が必要です。

3つの引数を持つ形式も同様の動作をするが、細部が異なる。 MySQL また、SUBSTR() と負の開始位置も許可しますが、SQL Server は SUBSTRING() を使用し、1 未満の開始位置は有効長ルールを使用して処理します。

SUBSTRING() 関数は、入力と同じカテゴリの型を返します。文字データの場合は varchar、Unicode テキストの場合は nvarchar、バイナリ式の場合は varbinary です。長さは、要求された部分文字列の長さに依存し、元の列全体の長さには依存しません。

ラップping WHERE句内のSUBSTRING()関数で列を指定すると、述語が非SARGableになるため、SQL Serverはその列に対してインデックスシークを使用できません。プレフィックス一致の場合は、通常、LIKE 'value%'パターンの方がパフォーマンスが優れています。

Yes. GitHubコパイロット 自然言語プロンプトから、区切り文字に基づく解析を含むSUBSTRING()およびCHARINDEX()式を作成できます。クエリを実行する前に、開始位置、長さ、および1ベースのインデックスを必ず確認してください。

AIと機械学習アシスタントは、平易な英語のルールをSUBSTRING()、CHARINDEX()、LEFT()、RIGHT()の組み合わせに変換し、長さの計算を提案し、オフバイワンエラーを指摘します。開発者は、デプロイ前に各提案の正当性を確認します。