Utilizamos el operador LIKE en PostgreSQL en el where para comprobar si cierta parte del valor de un campo contiene la palabra indicada. Por ejemplo, lo podemos utilizar en un campo que contiene nombre y apellidos y únicamente queremos obtener los registros donde su nombre sea Miguel sin importar el apellido. Vamos a verlo…
Sintaxis
La sintaxis del operador LIKE es la siguiente:
campo like 'Miguel%'
En el ejemplo anterior puedes observar como tenemos un caracter especial, %, este indica que despues de la palabra Miguel puede contener más letras. Si colocamos el % por delante le indicaríamos que debe acabar en Miguel y por tanto por delante podría tener cualquier otro caracter.
Puedes combinar el operador LIKE junto al NOT para indicar que el valor del campo no debe contener esos valores:
campo not like 'Miguel%'
Tanto LIKE como NOT LIKE pueden hacer uso de los siguientes comodines:
- %: el porcentaje indica uno o más caracteres.
- _: el guión bajo indica un único caracter.
Importante
PostgreSQL soporta el operador ILIKE. Se utiliza igual que LIKE pero la diferencia es que no es sensible a mayusculas y minúsculas.
Alternativas
PostgreSQL proporciona alternativas al operador LIKE. Puedes usar estas equivalencias:
Operador | Equivalencia |
---|---|
~~ | LIKE |
~~* | ILIKE |
!~~ | NOT LIKE |
!~~* | NOT ILIKE |
Ejemplos
En el siguiente ejemplo utilizamos el operador LIKE para mostrar solo aquellos empleados donde su apellido sea Troyano. Recuerda que nuestro campo de nombre contiene nombre y apellidos.
select * from empleados where nombre like '%Troyano';

En este otro ejemplo combinamos like con not like. Le estamos indicando que el nombre no puede acabar en Troyano y que ademas debe empezar por Pilar.
select * from empleados where nombre not like '%Troyano' and nombre like 'Pilar%'

En este otro ejemplo estamos mostrando todos los empleados donde su segunda letra sea un i:
select * from empleados where nombre like '_i%'

Ejemplo completo
Copia y pega el siguiente código en tu consola de PostgreSQL y realiza paso a paso leyendo los comentarios:
-- Borramos la tabla si existe drop table if exists empleados; -- Creamos la tabla create table empleados ( id_empleado numeric(2,0), id_departamento numeric(2,0), nombre character varying(50), puesto character varying(50), sueldo integer ); -- Insertamos valores insert into empleados values (1,1,'Miguel Troyano','Analista',60000), (2,1,'Ismael Troyano','Analista',60000), (3,1,'Jose Troyano','Director',80000), (4,1,'Pilar Redondo','Directora',80000); -- Mostramos los empleados donde el valor -- del campo nombre acabe en Troyano select * from empleados where nombre like '%Troyano' -- Mostramos los empleados donde el valor -- del campo nombre no acabe en Troyano -- y comience por Pilar select * from empleados where nombre not like '%Troyano' and nombre like 'Pilar%' -- Mostramos los empleados donde el segundo -- character sea una i select * from empleados where nombre like '_i%'