如何匹配 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
我有一列单词,其元素如下所示:
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