SQL Serverでは、T-SQL PATINDEX()を使用できます 文字列内のパターンを検索する関数。具体的には、関数は最初ののみを返します 文字列内のパターンの出現。
この関数は2つの引数を受け入れます。パターン、および文字列。
パターン内でワイルドカード文字を使用できます。
構文
構文は次のようになります:
PATINDEX ( '%pattern%' , expression )
ここでpattern は、検出されるシーケンスを含む文字式であり、 expression 検索する式です。
例1-基本的な使用法
仕組みの例を次に示します。
SELECT PATINDEX('%eer%', 'Bob likes beer.') AS Result; 結果:
+----------+ | Result | |----------| | 12 | +----------+
パーセント記号(% )は、0個以上の文字列を表すワイルドカード文字です。
例2–一致なし
ワイルドカード文字を含めない場合は、次のようになります。
SELECT PATINDEX('eer', 'Bob likes beer.') AS Result; 結果:
+----------+ | Result | |----------| | 0 | +----------+
ただし、完全な文字列がワイルドカードなしのパターンと一致する場合は、一致するものが得られます:
SELECT PATINDEX('Bob', 'Bob') AS Result; 結果:
+----------+ | Result | |----------| | 1 | +----------+
ただし、文字列にさらに多くの文字が含まれている場合、一致するものはありません:
SELECT PATINDEX('Bob', 'Bob likes beer.') AS Result; 結果:
+----------+ | Result | |----------| | 0 | +----------+
この場合、1つのワイルドカードを使用できます:
SELECT PATINDEX('Bob%', 'Bob likes beer.') AS Result; 結果:
+----------+ | Result | |----------| | 1 | +----------+
パターンの途中で1つのワイルドカードを使用することもできます:
SELECT PATINDEX('B%r.', 'Bob likes beer.') AS Result; 結果:
+----------+ | Result | |----------| | 1 | +----------+
この場合、文字列の開始と終了がパターンの開始と終了と一致したため、一致しました。もちろん、他のすべての文字はパーセント記号で覆われているため、文字列の中央もパターンの中央と一致しました。
例3–アンダースコアワイルドカード
別のワイルドカード文字を紹介する別の例を次に示します。
SELECT PATINDEX('B_er', 'Beer') AS Result; 結果:
+----------+ | Result | |----------| | 1 | +----------+
アンダースコア(_ )これは、任意の1文字のワイルドカードです。したがって、その位置にキャラクターが1人だけいる場合にのみ一致します。
もちろん、上記のパターンは多くの異なる文字列に一致する可能性があります。例:
SELECT
PATINDEX('B_er', 'Beer') AS 'Beer',
PATINDEX('B_er', 'Bier') AS 'Bier',
PATINDEX('B_er', 'Baer') AS 'Baer',
PATINDEX('B_er', 'B er') AS 'B er'; 結果:
+--------+--------+--------+--------+ | Beer | Bier | Baer | B er | |--------+--------+--------+--------| | 1 | 1 | 1 | 1 | +--------+--------+--------+--------+
例4– _の比較 および% ワイルドカード
この例は、_の違いを示しています および% ワイルドカード文字。
SELECT
PATINDEX('B%r', 'Beer') AS '%',
PATINDEX('B_r', 'Beer') AS '_',
PATINDEX('B__r', 'Beer') AS '__'; 結果:
+-----+-----+------+ | % | _ | __ | |-----+-----+------| | 1 | 0 | 1 | +-----+-----+------+
アンダースコアは、その位置に文字が1つだけある場合にのみ一致します。 2つの文字を一致させるには、2つのアンダースコアを使用する必要があります。
一方、パーセント記号は、次の例に示すように、ゼロを含む任意の数の文字と一致します。
SELECT
PATINDEX('Bee%r', 'Beer') AS '%',
PATINDEX('Bee_r', 'Beer') AS '_',
PATINDEX('Bee__r', 'Beer') AS '__'; 結果:
+-----+-----+------+ | % | _ | __ | |-----+-----+------| | 1 | 0 | 0 | +-----+-----+------+
例5–データベースの例
データベースクエリでこの関数を使用する例を次に示します。
USE Music;
SELECT
AlbumName,
PATINDEX('%the%', AlbumName) AS 'Pattern Index'
FROM Albums
WHERE PATINDEX('%the%', AlbumName) > 0;
結果:
+-------------------------+-----------------+ | AlbumName | Pattern Index | |-------------------------+-----------------| | Singing Down the Lane | 14 | | Ziltoid the Omniscient | 9 | | No Prayer for the Dying | 15 | | The Sixteen Men of Tain | 1 | +-------------------------+-----------------+>
この場合、私はWHEREを使用します PATINDEX()とともに実際に一致するアルバムのみを返す句 結果。 WHEREを削除した場合 条項では、一致するかどうかに関係なく、すべてのアルバムが返されます。
一致しなかった場合は、PATINDEX() 結果はゼロになります。
USE Music;
SELECT TOP(10)
AlbumName,
PATINDEX('%the%', AlbumName) AS 'Pattern Index'
FROM Albums;
結果:
+-------------------------+-----------------+ | AlbumName | Pattern Index | |-------------------------+-----------------| | Powerslave | 0 | | Powerage | 0 | | Singing Down the Lane | 14 | | Ziltoid the Omniscient | 9 | | Casualties of Cool | 0 | | Epicloud | 0 | | Somewhere in Time | 0 | | Piece of Mind | 0 | | Killers | 0 | | No Prayer for the Dying | 15 | +-------------------------+-----------------+>
例6–最初の発生のみ
前述のように、PATINDEX() 最初ののみを返します 文字列内のパターンの出現。
SELECT PATINDEX('%and%', 'Bob and beer and popcorn.') AS Result; 結果:
+----------+ | Result | |----------| | 5 | +----------+
CHARINDEX() 機能
T-SQL CHARINDEX() 関数はPATINDEX()に似ています 。ただし、この2つにはいくつかの違いがあります。特に、PATINDEX() ワイルドカード文字を受け入れますが、開始位置は受け入れません。 CHARINDEX() 一方、開始位置は受け入れますが、ワイルドカード文字は受け入れません。