PostgreSQL - klauzula LIKE
PostgreSQL LIKEoperator służy do dopasowywania wartości tekstowych do wzorca przy użyciu symboli wieloznacznych. Jeśli wyrażenie wyszukiwania można dopasować do wyrażenia wzorcowego, operator LIKE zwróci wartość true, czyli1.
Istnieją dwa symbole wieloznaczne używane w połączeniu z operatorem LIKE -
- Znak procentu (%)
- Podkreślenie (_)
Znak procentu oznacza zero, jedną lub wiele liczb lub znaków. Podkreślenie reprezentuje pojedynczą liczbę lub znak. Symbole te mogą być używane w kombinacjach.
Jeśli żaden z tych dwóch znaków nie jest używany w połączeniu z klauzulą LIKE, wówczas LIKE działa jak operator równości.
Składnia
Podstawowa składnia% i _ jest następująca -
SELECT FROM table_name
WHERE column LIKE 'XXXX%'
or
SELECT FROM table_name
WHERE column LIKE '%XXXX%'
or
SELECT FROM table_name
WHERE column LIKE 'XXXX_'
or
SELECT FROM table_name
WHERE column LIKE '_XXXX'
or
SELECT FROM table_name
WHERE column LIKE '_XXXX_'
Możesz łączyć liczbę N warunków za pomocą operatorów AND lub OR. Tutaj XXXX może być dowolną wartością liczbową lub łańcuchową.
Przykład
Oto kilka przykładów pokazujących WHERE część mającą różne klauzule LIKE z operatorami „%” i „_” -
S. Nie. | Oświadczenie i opis |
---|---|
1 | WHERE SALARY::text LIKE '200%' Znajduje wartości zaczynające się od 200 |
2 | WHERE SALARY::text LIKE '%200%' Znajduje wartości, które mają 200 na dowolnej pozycji |
3 | WHERE SALARY::text LIKE '_00%' Znajduje wszystkie wartości, które mają 00 na drugiej i trzeciej pozycji |
4 | WHERE SALARY::text LIKE '2_%_%' Znajduje wszystkie wartości, które zaczynają się od 2 i mają co najmniej 3 znaki |
5 | WHERE SALARY::text LIKE '%2' Znajduje wszystkie wartości kończące się na 2 |
6 | WHERE SALARY::text LIKE '_2%3' Znajduje wszystkie wartości, które mają 2 na drugiej pozycji i kończą się liczbą 3 |
7 | WHERE SALARY::text LIKE '2___3' Znajduje wszystkie wartości w liczbie pięciocyfrowej zaczynającej się od 2 i kończącej na 3 |
Postgres LIKE to tylko porównanie ciągów. Dlatego musimy jawnie rzutować kolumnę liczb całkowitych na łańcuch, jak w przykładach powyżej.
Weźmy prawdziwy przykład, rozważmy tabelę FIRMA , która ma następujące rekordy -
# select * from COMPANY;
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
(7 rows)
Poniżej znajduje się przykład, w którym zostaną wyświetlone wszystkie rekordy z tabeli COMPANY, w której WIEK zaczyna się od 2 -
testdb=# SELECT * FROM COMPANY WHERE AGE::text LIKE '2%';
Dałoby to następujący wynik -
id | name | age | address | salary
----+-------+-----+-------------+--------
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
8 | Paul | 24 | Houston | 20000
(7 rows)
Poniżej znajduje się przykład, w którym zostaną wyświetlone wszystkie rekordy z tabeli COMPANY, w której ADRES będzie zawierał łącznik (-) w tekście -
testdb=# SELECT * FROM COMPANY WHERE ADDRESS LIKE '%-%';
Dałoby to następujący wynik -
id | name | age | address | salary
----+------+-----+-------------------------------------------+--------
4 | Mark | 25 | Rich-Mond | 65000
6 | Kim | 22 | South-Hall | 45000
(2 rows)