PostgreSQL - Cláusula LIKE

El PostgreSQL LIKEEl operador se utiliza para hacer coincidir los valores de texto con un patrón utilizando comodines. Si la expresión de búsqueda puede coincidir con la expresión del patrón, el operador LIKE devolverá verdadero, que es1.

Hay dos comodines que se utilizan junto con el operador LIKE:

  • El signo de porcentaje (%)
  • El subrayado (_)

El signo de porcentaje representa cero, uno o varios números o caracteres. El guión bajo representa un solo número o carácter. Estos símbolos se pueden utilizar en combinaciones.

Si alguno de estos dos signos no se usa junto con la cláusula LIKE, LIKE actúa como el operador igual.

Sintaxis

La sintaxis básica de% y _ es la siguiente:

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_'

Puede combinar N número de condiciones utilizando operadores AND u OR. Aquí XXXX podría ser cualquier valor numérico o de cadena.

Ejemplo

Aquí hay una serie de ejemplos que muestran WHERE parte con una cláusula LIKE diferente con operadores '%' y '_':

S. No. Declaración y descripción
1

WHERE SALARY::text LIKE '200%'

Encuentra cualquier valor que comience con 200

2

WHERE SALARY::text LIKE '%200%'

Encuentra cualquier valor que tenga 200 en cualquier posición

3

WHERE SALARY::text LIKE '_00%'

Encuentra cualquier valor que tenga 00 en la segunda y tercera posiciones

4

WHERE SALARY::text LIKE '2_%_%'

Encuentra cualquier valor que comience con 2 y tenga al menos 3 caracteres de longitud

5

WHERE SALARY::text LIKE '%2'

Encuentra cualquier valor que termine en 2

6

WHERE SALARY::text LIKE '_2%3'

Encuentra cualquier valor que tenga 2 en la segunda posición y termine con un 3

7

WHERE SALARY::text LIKE '2___3'

Encuentra cualquier valor en un número de cinco dígitos que comience con 2 y termine con 3

Postgres LIKE es solo comparar cadenas. Por lo tanto, necesitamos convertir explícitamente la columna de números enteros en una cadena como en los ejemplos anteriores.

Tomemos un ejemplo real, consideremos la tabla EMPRESA , que tiene los siguientes registros:

# 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)

El siguiente es un ejemplo, que mostraría todos los registros de la tabla EMPRESA donde EDAD comienza con 2 -

testdb=# SELECT * FROM COMPANY WHERE AGE::text LIKE '2%';

Esto produciría el siguiente 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)

El siguiente es un ejemplo, que mostraría todos los registros de la tabla EMPRESA donde DIRECCIÓN tendrá un guión (-) dentro del texto -

testdb=# SELECT * FROM COMPANY WHERE ADDRESS  LIKE '%-%';

Esto produciría el siguiente resultado:

id | name | age |                      address              | salary
----+------+-----+-------------------------------------------+--------
  4 | Mark |  25 | Rich-Mond                                 |  65000
  6 | Kim  |  22 | South-Hall                                |  45000
(2 rows)