Váš jednoduchý případ lze vyřešit jednoduchým dotazem pomocí ANY
konstrukt a ~*
:
SELECT *
FROM tbl
WHERE col ~* ANY (string_to_array('The ships hung in the sky ... bricks don’t', ' '));
~*
je operátor shody regulárního výrazu bez ohledu na velikost písmen. Používám to místo ILIKE
takže můžeme použít původní slova ve vašem řetězci, aniž bychom museli vyplňovat %
pro ILIKE
. Výsledek je stejný - kromě slov obsahujících speciální znaky:%_\
pro ILIKE
a !$()*+.:<=>?[\]^{|}-
pro vzory regulárních výrazů. Možná budete muset uniknout speciálním postavám v obou směrech, abyste se vyhnuli překvapení. Zde je funkce pro regulární výrazy:
- Funkce Escape pro regulární výraz nebo vzory LIKE
Ale mám neodbytné pochybnosti, to bude vše, co budeš potřebovat. Viz můj komentář. Mám podezření, že potřebujete Fulltextové vyhledávání s odpovídajícím slovníkem pro váš přirozený jazyk, abyste poskytli užitečné odvození slov ...
Související:
- IN vs. ANY operátor v PostgreSQL
- Varianty výkonu dotazů PostgreSQL LIKE
- Shoda vzoru s LIKE, SIMILAR TO nebo regulárními výrazy v PostgreSQL