son - like sql server ejemplos
Comodín de PostgreSQL LIKE para cualquiera de una lista de palabras (4)
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 en mi mesa 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%'')
En realidad, hay un operador para eso en PostgreSQL:
SELECT *
FROM table
WHERE lower(value) ~~ ANY(''{%foo%,%bar%,%baz%}'');
PostgreSQL también admite expresiones regulares POSIX completas:
select * from table where value ~* ''foo|bar|baz'';
El ~*
es para una coincidencia insensible a mayúsculas y minúsculas, ~
es sensible a mayúsculas y minúsculas.
Otra opción es usar ANY :
select * from table where value like any (array[''%foo%'', ''%bar%'', ''%baz%'']);
select * from table where value ilike any (array[''%foo%'', ''%bar%'', ''%baz%'']);
Puede usar 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 tu caja de herramientas.
Puede usar el operador SIMILAR TO
Postgres, que admite alternancias, es decir,
select * from table where lower(value) similar to ''%(foo|bar|baz)%'';
Una solución "elegante" sería utilizar la búsqueda de texto completo: http://www.postgresql.org/docs/9.0/interactive/textsearch.html . Luego usaría consultas de búsqueda de texto completo.