I need to test if any part of a column value is in a given string, instead of whether the string is part of a column value. For instance:
This way, I can find if any
Your simple case can be solved with a simple query using the ANY
construct and ~*
:
SELECT *
FROM tbl
WHERE col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));
~*
is the case insensitive regular expression match operator. I use that instead of ILIKE
so we can use original words in your string without the need to pad %
for ILIKE
. The result is the same - except for words containing special characters: %_\
for ILIKE
and !$()*+.:<=>?[\]^{|}-
for regular expression patterns. You may need to escape special characters either way to avoid surprises. Here is a function for regular expressions:
But I have nagging doubts that will be all you need. See my comment. I suspect you need Full Text Search with a matching dictionary for your natural language to provide useful word stemming ...
Related: