w tym artykule dowiemy się, jak używać operatora SQL LIKE W Sql Server, używając wyrażeń regularnych do znajdowania i/lub manipulowania tekstem. Zaczniemy od nauki symboli i podstawowej składni używania wieloznacznych wyrażeń regularnych. Będziemy używać zestawów znaków i wyrażeń powtórzeń do tworzenia elastycznych wzorców dopasowania, a po drodze zbadamy różne sposoby korzystania z operatora LIKE. I na koniec, w drugiej części sekcji, omówimy niektóre z najczęstszych i najbardziej użytecznych przykładów wyrażeń regularnych.
SQL jest najczęściej używanym językiem do pracy z bazami danych. Podczas projektowania raportu lub korzystania z BI lub dowolnego narzędzia do raportowania, oprogramowanie prawie na pewno buduje zapytanie SQL za kulisami, które działa na bazie danych i zwraca wybrane dane. Gdy szukamy konkretnych danych lub danych, które pasują do określonych kryteriów, klauzula where zapewnia zestaw potrzebnych narzędzi. Daje to możliwość odpytywania określonych wierszy, których szukamy, zamiast całej tabeli.
wymagania wstępne
Pobierz bazę danych AdventureWorks2014 tutaj, aby przetestować następujące próbki T-SQL.
wprowadzenie
przejdźmy przez polecenia SQL za pomocą słowa kluczowego LIKE I znaków wieloznacznych. Zacznijmy więc uczyć się o operatorze SQL LIKE.
używanie SQL jak symboli wieloznacznych przykłady
wyrażenia regularne są wzorcami opisującymi jak dopasować łańcuchy znaków w klauzuli WHERE. Wiele języków programowania obsługuje wyrażenia regularne, które używają nieco innej składni niż to, co jest używane z operatorem LIKE. W tym artykule, kiedy odwołujemy się do wyrażeń regularnych, odnosimy się do wzorców używanych z operatorem SQL LIKE
Poniższa tabela zawiera cztery różne znaki wieloznaczne. Więcej przykładów można znaleźć w artykule SQL string functions for Data Munging (Wrangling).
znaki wieloznaczne |
opis |
% |
dowolny ciąg zawierający zero lub więcej znaków we wzorze wyszukiwania |
wyszukiwanie dowolnych znaków o określonym wzorze |
|
wyszukiwanie dowolnych znaków w określonym zakresie |
|
używając SQL jak z ” % ” znakiem wieloznacznym
następujące Polecenie SQL zwraca wszystkie wiersze tabeli osób, w których ich nazwisko zaczyna się od litery A. określimy literę „a”, pierwszy znak, który musi znajdować się w łańcuchu, a następnie użyjemy symbolu wieloznacznego”%”, czyli procent.
1
2
3
|
wybierz top 10 *
od osoby.Osoba
gdzie imię jak’a%’;
|
zobaczysz wyjście, które wyświetla 10 pierwszych wierszy tabeli osoby, gdzie imię zaczyna się od A, a reszta znaku jest nieznana.
używanie SQL tak jak w przypadku znaku wieloznacznego ’ _ ’
symbol wieloznaczny, podkreślenie, służy do dopasowania dowolnego pojedynczego znaku. Poniższe polecenie SQL znajduje wszystkie numery telefonów, które mają numer kierunkowy rozpoczynający się od 7 i kończący się na 8 w kolumnie Numer telefonu. Dodaliśmy również znak % wildcard na końcu wzorca wyszukiwania, ponieważ nie zajmujemy się resztą wartości ciągu.
1
2
3
3279bacba, ,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,PersonPhone jako ph
INNER JOIN Person.Osoba jak p na ph. Businessentiid = P.BusinessEntityID
gdzie ph.PhoneNumber jak '7_8%’
Uporządkuj według P. LastName;
|
wyjście pokazuje, że podany jest numer kierunkowy tego numeru zaczynający się na 7 i kończący się na 8.
używanie SQL jak z symbolami wieloznacznymi
nawiasy kwadratowe np. pozwalają nam zidentyfikować wiele pojedynczych znaków, które byłyby w danej pozycji. Na przykład, powiedzmy, aby wyświetlić wszystkie wiersze, w których imiona trzeci znak zaczynają się od I lub K. Zamiast pisać wiele podobnych warunków, możemy umieścić zestaw dopasowania wzorca w trzeciej pozycji i zamknąć go w kwadracie. Silnik zapytań najpierw szuka 'I’, a następnie 'K’.
wykonajmy następujące polecenie SQL
1
2
3
4
5
6
7
|
wybierz P. imię,
P.LastName,
PhoneNumber
od osoby.PersonPhone jako ph
INNER JOIN Person.Osoba jako p na ph.BusinessEntityID = P.BusinessEntityID
gdzie Ph.PhoneNumber jak '7_8%’ i p.lastname jak 'Ba%’
Zamów przez P.LastName;
|
powyższe zapytanie może być ponownie napisane za pomocą lub warunek. To raczej warunek sali operacyjnej.
1
2
3
4
5
6
7
|
WYBIERZ p. Nazwa,
p. Nazwisko,
Nr telefonu
OD Człowieka.PersonPhone jako ph
wewnętrzna osoba łącząca.Twarz jak p na ph.BusinessEntityID = P. BusinessEntityID
gdzie ph.Numer telefonu, taki jak” 7_8% „i (N. nazwisko, takie jak „buy%” lub N.lastname jak 'Bak%’)
Uporządkuj według P. LastName;
|
na wyjściu możemy zobaczyć nazwiska, w których trzecim znakiem jest 'I’ lub 'k’, są wymienione
używanie SQL jak z symbolem wieloznacznym ’ ^ ’
poniższe polecenie SQL wyświetla wszystkie wiersze, które nie mają litery zaczynającej się od A do D w pierwszym znaku ich nazwiska. W tym celu należy umieścić znak tyldy na pierwszej pozycji wzoru. To nie staje się warunkiem wstępnym.
teraz, jeśli uruchomię powyższe zapytanie, zobaczymy, że wszystkie powracające nazwy nie mają A, B, C ani D jako pierwszego znaku.
używanie SQL nie tak jak w przypadku znaków wieloznacznych
poniższe polecenie SQL wyszukuje wszystkie osoby, w których kolumna imienia ma więcej niż 3 znaki.
lista wyjść tylko te nazwy, w których długość imienia jest większa niż 3
używając SQL podobnie jak w przypadku klauzuli Escape
w poniższej instrukcji SQL, klauzula Escape jest używana do ucieczki znaku ’!’aby zanegować znaczenie’ % 'aby znaleźć łańcuch’ 100% Free ’ w kolumnie col1 tabeli temp.
1
2
3
4
5
6
7
8
9
10
11
12
|
DROP TABLE IF EXISTS temp;
CREATE TABLE temp(col1 VARCHAR(100));
GO
INSERT INTO temp
VALUES(’ApexSQL Refactor is 100% Free SQL Formatter tool’), (’ApexSQL Job is 10-15% off today only’);
GO
SELECT *
FROM TEMP;
SELECT *
FROM temp
WHERE col1 LIKE '%100!% Free % ’ ESCAPE ’!’;
GO
|
wyjście wyświetla tylko te wartości, w których wzorzec wyszukiwania '100% Free’ pasuje do wyrażenia col1.
używając SQL tak jak w przypadku instrukcji CASE
poniższe polecenie SQL usuwa wszystkich pracowników, którzy mają numer telefonu sformatowany jak trzy-trzy-cztery cyfry z myślnikami pomiędzy (999-999-9999). Wzór jest następnie porównywany z kolumną numeru telefonu, aby uzyskać kategorie krajowe lub międzynarodowe.
wyrażenie case jest obliczane dla określonego wzorca, aby uzyskać Typ kategorii telefonu.
1
2
3
4
5
6
7
8
9
|
WYBIERZ p. Nazwa,
p. Nazwisko,
Nr telefonu
PRZYPADEK, GDY numer telefonu, na PRZYKŁAD, „–„, następnie „Wewnętrzny numer telefonu”
JESZCZE „Międzynarodowy numer telefonu”
Nr telefonu W INDIACH
OD Człowieka.PersonPhone jako ph
wewnętrzna osoba łącząca.Osoba jako p na ph. BusinessEntityID = P. BusinessEntityID
zamów według P. LastName;
|
na wyjściu widzimy, że numer jest klasyfikowany jako krajowy lub międzynarodowy. Kolumna phonenumber jest obliczana za pomocą operatora LIKE za pomocą nawiasu kwadratowego. Liczba od 0 do 9 w pozycji pierwszego znaku jest obliczana pod kątem dopasowania wzorca od 0 do 9, każda liczba od 0 do 9 w pozycji drugiego znaku i trzeciej, a następnie pozycja czwartego znaku musi być myślnikiem i podobna logika jest stosowana do reszty znaków.
używając SQL tak jak w dynamicznym SQL
poniższe polecenie SQL zwraca wszystkich pracowników, których ostatnia nazwa pasuje do wzorca Barb. Wzorzec jest wytwarzany dynamicznie i porównywany z wyrażeniem.
1
2
3
4
5
6
7
|
wyjście wyświetla pasujące wiersze dla określonego wzorca Barb
Uwaga: Domyślnie char wstrzykuje końcowe spacje w zależności od długości pola. Użyj RTRIM do tłumienia końcowych spacji, jeśli używasz typu danych char.
w poniższej instrukcji SQL pole @eLastName jest typu danych char. Możesz zobaczyć użycie funkcji RTRIM do przycinania końcowych spacji.
1
2
3
4
5
6
7
|
PODAJĄC SYMBOL @ELASTNAME(20)= 'Cierń’;
WYBIERZ p. Nazwa,
p. Nazwisko,
.Miasto
od osoby.Osoba p
dołącz do osoby.Adres na p. BusinessEntityID = 'S. adres
gdzie jest P. nazwisko, na przykład’ %’ + RTRIM (@nazwa użytkownika)+’%’;
|
używając SQL tak jak z instrukcją IF
następujące polecenie SQL, wartość wejściowa jest obliczana dla określonego wzorca w klauzuli condition przy użyciu instrukcji IF.
1
2
3
4
5
|
declare @rulename nvarchar(Max)= 'SQL Sever 2019 CTP jest dostępny do podglądu’;
jeśli @RuleName jak 'SQL Sever % CTP jest dostępny do podglądu’
PRINT ’ poprawne wejście dobre!’;
ELSE
PRINT ’ not a valid good!’;
|
łańcuch wejściowy jest obliczany dla określonych wzorców za pomocą wyrażenia wieloznacznego SQL i zwraca prawidłowy łańcuch wejściowy.
to wszystko na razie!
podsumowanie
do tej pory omówiliśmy różne wskazówki i cztery różne symbole wieloznaczne ( % ,_, i^], które są dostępne z operatorem SQL LIKE. Jest to świetna technika wyszukiwania do dopasowania ciągu znaków z określonymi wzorami lub gdzie nie mamy pewności, co szukasz aka fuzzy search. Dostępne znaki wieloznaczne sprawiają, że operator LIKE jest bardziej elastyczny. Mam nadzieję, że podobał Ci się ten artykuł na temat operatora SQL LIKE W Sql Server. Zachęcamy do zadawania pytań w komentarzach poniżej.
- Autor
- Ostatnie posty
moją specjalnością jest projektowanie & wdrażanie rozwiązań wysokiej dostępności i wieloplatformowa migracja DB. Obecnie stosowane technologie to SQL Server, PowerShell, Oracle i MongoDB.
Zobacz wszystkie posty, których autorem jest Prashanth Jayaram
- szybki przegląd audytu bazy danych w SQL – Styczeń 28, 2021
- Jak ustawić w górę synchronizacja danych Azure między bazami danych Azure SQL a lokalnym serwerem SQL-20 stycznia 2021 r
- jak wykonywać operacje importu/eksportu bazy danych Azure SQL przy użyciu PowerShell – 14 stycznia 2021 r