PostgreSQL - Clausola LIKE
Il PostgreSQL LIKEL'operatore viene utilizzato per confrontare i valori di testo con un modello utilizzando i caratteri jolly. Se l'espressione di ricerca può essere abbinata all'espressione del modello, l'operatore LIKE restituirà true, ovvero1.
Ci sono due caratteri jolly usati insieme all'operatore LIKE:
- Il segno di percentuale (%)
- Il carattere di sottolineatura (_)
Il segno di percentuale rappresenta zero, uno o più numeri o caratteri. Il trattino basso rappresenta un singolo numero o carattere. Questi simboli possono essere utilizzati in combinazioni.
Se uno di questi due segni non viene utilizzato insieme alla clausola LIKE, il LIKE si comporta come l'operatore di uguale.
Sintassi
La sintassi di base di% e _ è la seguente:
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_'
È possibile combinare un numero N di condizioni utilizzando gli operatori AND o OR. Qui XXXX potrebbe essere qualsiasi valore numerico o stringa.
Esempio
Di seguito sono riportati alcuni esempi che mostrano la parte WHERE con clausole LIKE diverse con operatori '%' e '_' -
S. No. | Dichiarazione e descrizione |
---|---|
1 | WHERE SALARY::text LIKE '200%' Trova tutti i valori che iniziano con 200 |
2 | WHERE SALARY::text LIKE '%200%' Trova tutti i valori che hanno 200 in qualsiasi posizione |
3 | WHERE SALARY::text LIKE '_00%' Trova tutti i valori che hanno 00 nella seconda e terza posizione |
4 | WHERE SALARY::text LIKE '2_%_%' Trova tutti i valori che iniziano con 2 e sono lunghi almeno 3 caratteri |
5 | WHERE SALARY::text LIKE '%2' Trova tutti i valori che terminano con 2 |
6 | WHERE SALARY::text LIKE '_2%3' Trova tutti i valori che hanno 2 nella seconda posizione e terminano con 3 |
7 | WHERE SALARY::text LIKE '2___3' Trova tutti i valori in un numero di cinque cifre che iniziano con 2 e finiscono con 3 |
Postgres LIKE è solo confronto tra stringhe. Quindi, è necessario eseguire il cast esplicito della colonna integer su string come negli esempi precedenti.
Facciamo un esempio reale, consideriamo la tabella AZIENDA , avente i record come segue:
# 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)
Il seguente è un esempio, che visualizzerebbe tutti i record dalla tabella AZIENDA dove AGE inizia con 2 -
testdb=# SELECT * FROM COMPANY WHERE AGE::text LIKE '2%';
Ciò produrrebbe il seguente risultato:
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)
Il seguente è un esempio, che visualizzerebbe tutti i record dalla tabella AZIENDA dove INDIRIZZO avrà un trattino (-) all'interno del testo -
testdb=# SELECT * FROM COMPANY WHERE ADDRESS LIKE '%-%';
Ciò produrrebbe il seguente risultato:
id | name | age | address | salary
----+------+-----+-------------------------------------------+--------
4 | Mark | 25 | Rich-Mond | 65000
6 | Kim | 22 | South-Hall | 45000
(2 rows)