.Przewodnik

w SQL Server możesz użyć funkcji T-SQL PATINDEX(), aby znaleźć wzorzec w ciągu znaków. Funkcja zwraca tylko pierwsze wystąpienie wzorca w łańcuchu.

funkcja przyjmuje dwa argumenty; wzorzec i łańcuch znaków.

Możesz używać znaków wieloznacznych we wzorze.

składnia

składnia wygląda następująco:

PATINDEX ( '%pattern%' , expression )

gdzie wzorzec jest wyrażeniem znakowym, które zawiera sekwencję do znalezienia, a wyrażenie jest wyrażeniem do przeszukiwania.

przykład 1 – Podstawowe użycie

oto przykład, jak to działa:

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

wynik:

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

znak procentowy (%) jest znakiem wieloznacznym, który reprezentuje dowolny znak.ciąg zero lub więcej znaków.

przykład 2 – brak dopasowania

oto, co się stanie, gdy nie dodamy znaków wieloznacznych:

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

wynik:

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

chociaż, jeśli pełny ciąg pasuje do wzorca bez żadnych symboli wieloznacznych, otrzymasz dopasowanie:

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

wynik:

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

jednak nie uzyskasz dopasowania, jeśli łańcuch zawiera więcej znaków:

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

wynik:

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

w takim przypadku możesz użyć pojedynczego symbolu wieloznacznego:

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

wynik:

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

Możesz również użyć pojedynczego symbolu wieloznacznego gdzieś w środku wzorca:

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

wynik:

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

w tym przypadku mamy dopasowanie, ponieważ początek i koniec łańcucha pasują do początku i koniec wzoru. Oczywiście, środek ciągu również pasował do środka wzorca, ponieważ wszystkie inne znaki są objęte znakiem procentowym.

przykład 3-znak podkreślenia

oto kolejny przykład, w którym Wprowadzamy kolejny znak wieloznaczny:

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

wynik:

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

podkreślnik (_), który jest symbolem wieloznacznym dla każdego pojedynczego znaku. W związku z tym będzie pasować tylko wtedy, gdy będzie dokładnie jedna postać w tej pozycji.

oczywiście powyższy wzór może pasować do wielu różnych ciągów. Na przykład:

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

Result:

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

przykład 4 – Porównanie symboli wieloznacznych _ i %

Ten przykład pokazuje różnicę między znakami wieloznacznymi_ I%.

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

wynik:

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

podkreślenie pasuje tylko wtedy, gdy w tej pozycji znajduje się dokładnie jeden znak. Aby dopasować dwa znaki, musimy użyć dwóch podkreślników.

znak procentowy z drugiej strony pasuje do dowolnej liczby znaków, w tym zera, jak widać w poniższym przykładzie:

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

wynik:

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

przykład 5 – przykład bazy danych

oto przykład użycia tej funkcji w zapytaniu do bazy danych:

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

wynik:

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

w tym przypadku używam klauzuli WHERE, aby zwrócić tylko te albumy, które faktycznie pasują, wraz z ich wynikiem PATINDEX(). Jeśli wyrzucę klauzulęWHERE, wszystkie albumy zostaną zwrócone, niezależnie od tego, czy pasują, czy nie.

dla tych, które nie pasowały, wynikPATINDEX() byłby zerowy.

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

wynik:

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

przykład 6 – tylko pierwsze wystąpienie

jak wspomniano, PATINDEX() zwraca tylko pierwsze wystąpienie wzorca w łańcuchu.

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

wynik:

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

funkcja CHARINDEX ()

funkcja T-SQL CHARINDEX() jest podobna do PATINDEX(). Istnieją jednak pewne różnice między nimi. W szczególności PATINDEX() akceptuje znaki wieloznaczne, ale nie pozycję wyjściową. CHARINDEX() z drugiej strony przyjmuje pozycję początkową, ale nie znaki wieloznaczne.

Related Posts

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *