En el alfabeto español, tenemos palabras con acentos ortográficos al igual que en otros alfabetos. Además de estos signos diacríticos, también existen los caracteres en mayúscula o minúscula. Esto puede suponer un problema cuando realizamos consultas con un patrón en concreto para filtrar los resultados, al no encontrar algunos registros debido al acento, o porque tiene algún carácter en letra capital (mayúscula).
En el articulo de hoy, vamos a aprender cómo filtrar palabras en Postgres con un patrón dado utilizando unos operadores.
Operadores Like e iLike
Con estos operadores podemos filtrar nuestras consultas cuando queramos obtener unos resultados con un patrón dado, en el caso de que los caracteres estén en mayúscula o en minúscula. Para ello disponemos del operador Like, que permite distinguir entre mayúsculas y minúsculas, por lo que es case sensitive. Es decir, debemos indicar en el patrón de nuestras consultas, los caracteres en mayúscula o minúscula.
En cambio con el operador iLike es indiferente, ya que no es case sensitive. En caso de que la palabra esté en letra capital o no, obtendremos el mismo resultado indicándole el mismo patrón.
Antes de ver los diferentes ejemplos utilizando estos dos operadores para buscar registros con un patrón dado, observa la siguiente imagen con todos los registros de una tabla de transportes.
En estos registros, vemos que en la columna “vehículos” tenemos las mismas palabras escritas en minúscula y en mayúsculas, además de contener acentos ortográficos.
Ejemplo de operador LIKE
Vamos a extraer aquellos registros que coincidan con el siguiente patrón: Ver aquellos vehículos que sean coches con su matricula.
Código de la sentencia:
SELECT vehiculo, matricula FROM public.transportes WHERE vehiculo LIKE 'coche';
Como vemos, el resultado es un único registro, dado que en el patrón le hemos especificado todos los caracteres en minúscula.
En este caso, extraemos los registros que coincidan con este otro patrón: Ver aquellos vehículos que sean camiones con su matricula.
Código de la sentencia:
SELECT vehiculo, matricula FROM public.transportes WHERE vehiculo LIKE 'Camion';
Sólo nos muestra un registro que coincide con el patrón especificado. La primera letra en mayúscula, y sin acento.
Ejemplo de operador iLIKE
Para ver bien la diferencia de estos dos operadores, realizaremos las mismas consultas con los mismos patrones.
Extraemos todos los registros que cuyo vehículo sea un coche, y añadimos la matricula correspondiente.
Código de la sentencia:
SELECT vehiculo, matricula FROM public.transportes WHERE vehiculo iLIKE 'coche';
El resultado incluye los tres registros que coinciden con el tipo de vehículo especificado en el patrón. Tanto los almacenado en mayúscula, como los que están en minúscula.
Ahora vamos a extraer aquellos registros que coinciden con camiones, especificando el mismo patrón.
Código de la sentencia:
SELECT vehiculo, matricula FROM public.transportes WHERE vehiculo iLIKE 'Camion';
Nos muestra dos registros de los cuatros que tenemos almacenado, ya que en el patrón se ha especificado la primera letra en mayúscula y sin acento.
Conclusión
Utilizando los operadores LIKE e iLIKE, podemos obtener unos resultados diferentes, aunque le especifiquemos el mismo texto en el patrón. Por ello debemos de tener especial cuidado a la hora de almacenar los datos, así como cuando filtramos los registros con estos operadores en Postgres. Sobre todo hay que tener muy en cuenta los acentos. Trataremos este tema en profundidad en próximas entradas.