PostgreSQL - cláusula LIKE
O PostgreSQL LIKEoperador é usado para comparar valores de texto com um padrão usando curingas. Se a expressão de pesquisa puder ser correspondida à expressão padrão, o operador LIKE retornará verdadeiro, que é1.
Existem dois curingas usados em conjunto com o operador LIKE -
- O sinal de porcentagem (%)
- O sublinhado (_)
O sinal de porcentagem representa zero, um ou vários números ou caracteres. O sublinhado representa um único número ou caractere. Esses símbolos podem ser usados em combinações.
Se qualquer um desses dois sinais não for usado em conjunto com a cláusula LIKE, então o LIKE atua como o operador igual.
Sintaxe
A sintaxe básica de% e _ é a seguinte -
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_'
Você pode combinar um número N de condições usando os operadores AND ou OR. Aqui, XXXX pode ser qualquer valor numérico ou string.
Exemplo
Aqui estão alguns exemplos que mostram a parte WHERE com cláusulas LIKE diferentes com os operadores '%' e '_' -
S. No. | Declaração e descrição |
---|---|
1 | WHERE SALARY::text LIKE '200%' Encontra qualquer valor que comece com 200 |
2 | WHERE SALARY::text LIKE '%200%' Encontra qualquer valor que tenha 200 em qualquer posição |
3 | WHERE SALARY::text LIKE '_00%' Encontra qualquer valor que tenha 00 na segunda e terceira posições |
4 | WHERE SALARY::text LIKE '2_%_%' Encontra todos os valores que começam com 2 e têm pelo menos 3 caracteres de comprimento |
5 | WHERE SALARY::text LIKE '%2' Encontra todos os valores que terminam com 2 |
6 | WHERE SALARY::text LIKE '_2%3' Encontra qualquer valor que tenha 2 na segunda posição e termine com 3 |
7 | WHERE SALARY::text LIKE '2___3' Encontra qualquer valor em um número de cinco dígitos que começa com 2 e termina com 3 |
Postgres LIKE é apenas comparação de strings. Portanto, precisamos converter explicitamente a coluna inteira em string como nos exemplos acima.
Tomemos um exemplo real, considere a tabela EMPRESA , tendo os registros a seguir -
# 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)
A seguir está um exemplo, que exibiria todos os registros da tabela COMPANY onde AGE começa com 2 -
testdb=# SELECT * FROM COMPANY WHERE AGE::text LIKE '2%';
Isso produziria o seguinte resultado -
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)
A seguir está um exemplo, que exibiria todos os registros da tabela COMPANY onde ADDRESS terá um hífen (-) dentro do texto -
testdb=# SELECT * FROM COMPANY WHERE ADDRESS LIKE '%-%';
Isso produziria o seguinte resultado -
id | name | age | address | salary
----+------+-----+-------------------------------------------+--------
4 | Mark | 25 | Rich-Mond | 65000
6 | Kim | 22 | South-Hall | 45000
(2 rows)