如何匹配 PostgreSQL 中的超字符串?

How to match a superstring in PostgreSQL?

我有一列单词,其元素如下所示:

id | word
---+---------
1  | cute
2  | advanced
3  | unusual

假设我想 运行 查询词“cuter”或“cutest”。我想做类似的事情:

SELECT * FROM words WHERE word% LIKE 'cutest'

当然,我知道那是无效的 SQL 语法,但我想匹配超字符串,而不是子字符串。

我不想使用相似性包,因为它会匹配“notcute”之类的东西,而我只想指定通配符应该放在 end领域。

这可以在 Postgres 中实现吗?

图案位于 LIKE 的右侧。所以:

SELECT * FROM words
WHERE 'cutest' LIKE word || '%'
AND    word Like 'cute%';

我添加了另一个 WHERE 条件来消除 'cut' 或 'c' 等词的误报。此外,这仍然可以(并且通常会)使用索引,而表达式 'cutest' LIKE word || '%' 绝对不能。

请注意 'cuter' 不符合条件。你的问题有点前后矛盾。

参见:

  • PostgreSQL LIKE query performance variations

要将您单词中的特殊字符视为 non-special,您必须相应地进行转义。参见:

  • Escape function for regular expression or LIKE patterns