从 SQL LIKE 查询中排除标点符号

Exclude punctuation from SQL LIKE query

我正在 运行 宁 SQL 查询寻找确切的单词或短语(用户在 运行 时间决定)。因此请求可能是查找短语 "plays catch"

我创建的 SQL 查询类似于:

SELECT * 
FROM NOTES 
WHERE DETAIL LIKE "plays catch %" 
   OR DETAIL LIKE "% plays catch %";

因为用户会寻找一个确切的短语,所以我将 space 放在 "catch" 之后和“%”之前,因为我想避免使用类似但不同的词,例如 "Catch-up".

所以问题在于处理句号或逗号等标点符号。

不幸的是,我现在的查询将排除包含

详细信息的注释
John plays catch.

但会包括

John plays catch with his dog.

有人知道在 SQL 查询中忽略基本标点符号的简单方法吗?

顺便说一句,这是我第一次 post 在您的论坛上,如果我在此 post.

中走错了,很高兴接受指导

如果你的数据库支持正则表达式,那么你可以这样处理。例如:

SELECT *
FROM NOTES 
WHERE ' ' || DETAIL REGEXP ' plays catch[ ,.!?]' ;

|| 是字符串连接的标准运算符,尽管有些数据库不支持它。)

或者如果合适的话,您可以使用单词分隔符 ('\w')。

如果你的数据库没有,你可以使用REPLACE():

SELECT *
FROM NOTES 
WHERE REPLACE(REPLACE(' ' || DETAIL, ',', ' '), '.', ' ') LIKE '% plays catch %' ;
SELECT *
FROM testing
WHERE alphanum(test) LIKE CONCAT('%', alphanum('plays catch'), '%')