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()
一方、開始位置は受け入れますが、ワイルドカード文字は受け入れません。