SQL Server i wyszukiwanie znaków specjalnych w tekście
Jak w tekście znaleźć %?
Jakiś czas temu pisałem o trudnej sztuce wyszukiwania łańcuchów znaków w kolumnach pasujących do zadanego wzorca za pomocą instrukcji LIKE. Sprawa już wtedy mocno się komplikowała. Jak wiemy, w SQL Server znajduje się kilka znaków specjalnych, między innymi % i _. Co mamy zrobić, jeżeli rzeczywiście poszukujemy znaku procenta? Nie możemy przecież napisać LIKE '%', bo SQL Server zwróci nam wszystkie rekordy. Zapamiętajmy sobie zatem:
SELECT Kolumna FROM Tabela WHERE
Kolumna LIKE '%%%'
W poprzednim artykule (Znaki specjalne SQL w zapytaniach LIKE) opisałem zastosowanie nawiasów kwadratowych, za pomocą których definiujemy zbiór znaków dozwolonej na konkretnej pozycji. To jest właśnie jedna z metod wyszukiwania znaku % w tekście. Popatrzmy na przykład:
SELECT Kolumna FROM Tabela WHERE
Kolumna LIKE '%[%]%'
Jak poradzić sobie ze znakami [ i ]
Wiemy już, jak poradzić sobie ze znakiem procenta (%). Podobnie można sobie poradzić ze znakiem podkreślenia (_). Co ze znakami [ i ]? Warto zapamiętać, że znak ], do tej pory zawsze określany jako znak specjalny, nie jest pełnoprawnym znakiem specjalnym. Jest to znak specjalny kontekstowy. Oznacza to, że umieszczenie go w warunku LIKE nie wymaga żadnych dodatkowych operacji. Popatrzmy na przykład zapytania, w którym wykorzystywany jest znak ]:
Jak widać, zapytanie nie różni się od innych zapytań tego typu. Sytuacja wygląda zupełnie inaczej, jeżeli musimy znaleźć łańcuchy znaków zawierające znak [. W takim przypadku należy go otoczyć znakami... [ i ]. Przyjrzyjmy się zatem następującemu zapytaniu:
SELECT * FROM AdresyClustered WHERE Ulica LIKE '%[[]%'
Uniwersalny sposób
Zanim przejdziemy do wyjaśnienia ostatniego sposobu, przyjrzyjmy się składni instrukcji warunkowej LIKE:
Kluczowym elementem tej układanki jest składnia ze słowem kluczowym ESCAPE. Służy ona do definiowania znaku, który likwiduje, znosi, nazwijmy to sobie, "specjalność" znaku specjalnego. Przyjrzyjmy się teraz sposobowi wyszukania tekstu [ABC] w dowolnej kolumnie z wykorzystaniem znaku ucieczki. Przykład zaprezentowany jest poniżej:
Znak [ poprzedzony znakiem ucieczki traci swoją moc, traktowany jest jak każdy inny znak. Na wszelki wypadek anulowana jest moc znaku ], chociaż akurat to posunięcie nie jest konieczne. Na koniec warto sobie zadać szalenie ważne pytanie. Co ze znakiem ucieczki? Znak ucieczki należy w takim przypadku poprzedzić drugim znakiem ucieczki. Przyjrzyjmy się zatem ostatniemu przykładowi. Tym razem zamierzamy wyszukać tekst [ABC]\. Przykładowe rozwiązanie pokazane jest poniżej.
Wnioski
Wyszukiwanie łańcuchów znaków w kolumnach tabel bazy danych zwykle nie jest zadaniem trudnym. Mam nadzieję, że większość przypadków została szczegółowo opisana. Zachęcam do dzielenia się ciekawymi przypadkami w komentarzach.
Kategoria:SQL Server
Komentarze:
A jak usunąć ze stringa znak '
?