Comodín de PostgreSQL LIKE para cualquiera de una lista de palabras
Tengo una lista simple de ~25 palabras. Tengo un campo varchar en PostgreSQL, digamos que la lista es ['foo', 'bar', 'baz']
. Quiero encontrar cualquier fila de mi tabla que tenga alguna de esas palabras. Esto funcionará, pero me gustaría algo más elegante.
select *
from table
where (lower(value) like '%foo%' or lower(value) like '%bar%' or lower(value) like '%baz%')
PostgreSQL también admite expresiones regulares POSIX completas :
select * from table where value ~* 'foo|bar|baz';
Es ~*
para una coincidencia que no distingue entre mayúsculas ~
y minúsculas.
Otra opción es utilizar CUALQUIER :
select * from table where value like any (array['%foo%', '%bar%', '%baz%']);
select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);
Puede utilizar ANY con cualquier operador que genere un valor booleano. Sospecho que las opciones de expresiones regulares serían más rápidas, pero CUALQUIERA es una herramienta útil para tener en su caja de herramientas.
Puede utilizar SIMILAR TO
el operador de Postgres que admite alternancias, es decir
select * from table where lower(value) similar to '%(foo|bar|baz)%';
En realidad existe un operador para eso en PostgreSQL:
SELECT *
FROM table
WHERE lower(value) ~~ ANY('{%foo%,%bar%,%baz%}');