.Průvodce

v SQL Serveru můžete použít funkci T-SQL PATINDEX() k nalezení vzoru v řetězci. Konkrétně funkce vrací pouze první výskyt vzoru v řetězci.

funkce přijímá dva argumenty; vzor a řetězec.

ve vzoru můžete použít zástupné znaky.

syntaxe

syntaxe jde takto:

PATINDEX ( '%pattern%' , expression )

Kde vzor je postava, výraz, který obsahuje sekvenci lze nalézt, a výraz je výraz, který má být prohledán.

Příklad 1 – Základní Použití

Tady je příklad, jak to funguje:

SELECT PATINDEX('%eer%', 'Bob likes beer.') AS Result;

Výsledek:

+----------+| Result ||----------|| 12 |+----------+

doplněny znakem procento (%) je zástupný znak, který představuje libovolný řetězec nula nebo více znaků.

příklad 2-žádná shoda

zde je to, co se stane, když nezahrneme zástupné znaky:

SELECT PATINDEX('eer', 'Bob likes beer.') AS Result;

Výsledek:

+----------+| Result ||----------|| 0 |+----------+

i když, pokud celý řetězec odpovídá vzoru, bez jakékoli zástupné znaky, budete mít zápas:

SELECT PATINDEX('Bob', 'Bob') AS Result;

Výsledek:

+----------+| Result ||----------|| 1 |+----------+

Nicméně, nebudete mít zápas, pokud řetězec obsahuje více znaků:

SELECT PATINDEX('Bob', 'Bob likes beer.') AS Result;

Výsledek:

+----------+| Result ||----------|| 0 |+----------+

V takovém případě můžete použít jeden zástupný znak:

SELECT PATINDEX('Bob%', 'Bob likes beer.') AS Result;

Výsledek:

+----------+| Result ||----------|| 1 |+----------+

můžete také použít jeden zástupný znak někde uprostřed vzor:

SELECT PATINDEX('B%r.', 'Bob likes beer.') AS Result;

Výsledek:

+----------+| Result ||----------|| 1 |+----------+

V tomto případě máme shodu, protože začátek a konec řetězce odpovídající začátek a konec vzoru. Samozřejmě, střed řetězce také odpovídal středu vzoru, protože všechny ostatní znaky jsou pokryty znakem procenta.

příklad 3-zástupný znak podtržítka

zde je další příklad, kde představujeme další zástupný znak:

SELECT PATINDEX('B_er', 'Beer') AS Result;

Výsledek:

+----------+| Result ||----------|| 1 |+----------+

podtržení (_), což je zástupný znak pro jakýkoliv jednotlivý znak. Proto se bude shodovat pouze v případě, že je v této pozici přesně jedna postava.

výše uvedený vzor by samozřejmě mohl odpovídat mnoha různým řetězcům. Například:

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';

výsledek:

+--------+--------+--------+--------+| Beer | Bier | Baer | B er ||--------+--------+--------+--------|| 1 | 1 | 1 | 1 |+--------+--------+--------+--------+

Příklad 4 – Porovnání _ a % Zástupné znaky

Tento příklad demonstruje rozdíl mezi _% zástupné znaky.

SELECT PATINDEX('B%r', 'Beer') AS '%', PATINDEX('B_r', 'Beer') AS '_', PATINDEX('B__r', 'Beer') AS '__';

Výsledek:

+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 1 |+-----+-----+------+

podtržítko pouze zápasy, když tam je přesně jeden znak v této pozici. Abychom sladili dva znaky, musíme použít dvě podtržítka.

znaménko procenta na druhé straně odpovídá libovolnému počtu znaků, včetně nuly, jak je vidět v následujícím příkladu:

SELECT PATINDEX('Bee%r', 'Beer') AS '%', PATINDEX('Bee_r', 'Beer') AS '_', PATINDEX('Bee__r', 'Beer') AS '__';

Výsledek:

+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 0 |+-----+-----+------+

Příklad 5 – Databáze Příklad:

Zde je příklad použití této funkce v databázovém dotazu:

USE Music;SELECT AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM AlbumsWHERE PATINDEX('%the%', AlbumName) > 0;

Výsledek:

+-------------------------+-----------------+| AlbumName | Pattern Index ||-------------------------+-----------------|| Singing Down the Lane | 14 || Ziltoid the Omniscient | 9 || No Prayer for the Dying | 15 || The Sixteen Men of Tain | 1 |+-------------------------+-----------------+

V tomto případě jsem pomocí WHERE klauzule vrátí pouze ty alba, které vlastně zápas, spolu s jejich PATINDEX() výsledek. Kdybych zrušil klauzuli WHERE, všechna alba by byla vrácena bez ohledu na to, zda se shodují nebo ne.

pro ty, které se neshodují, bude výsledek PATINDEX() nulový.

USE Music;SELECT TOP(10) AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM Albums;

Výsledek:

+-------------------------+-----------------+| 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 |+-------------------------+-----------------+

Příklad 6 – První Výskyt Pouze

Jak již bylo zmíněno, PATINDEX() vrátí pouze první výskyt vzoru v řetězci.

SELECT PATINDEX('%and%', 'Bob and beer and popcorn.') AS Result;

Výsledek:

+----------+| Result ||----------|| 5 |+----------+

CHARINDEX() Funkce

T-SQL CHARINDEX() funkce je podobná PATINDEX(). Mezi nimi však existují určité rozdíly. Zejména PATINDEX() přijímá zástupné znaky, ale ne výchozí pozici. CHARINDEX() na druhé straně přijímá výchozí pozici, ale ne zástupné znaky.

Related Posts

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *