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

时间:2018-09-01 09:51:49

标签: sql sql-server sql-like

我正在运行一个SQL查询,以查找确切的单词或短语(用户在运行时决定)。因此,请求可能是寻找短语“ plays catch”

我创建的SQL查询与此类似:

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

因为用户要查找确切的词组,所以我在“ catch”之后和“%”之前加上空格,因为我想避免使用类似但又不同的词,例如“ Catch-up”。

因此问题出在处理标点符号,例如句点或逗号。

很遗憾,我的查询现在将排除带有

详细信息的注释
John plays catch.

但将包含

John plays catch with his dog.

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

顺便说一句,这是我在您论坛上的第一篇帖子,如果我误导了这篇帖子,很高兴接受指导。

2 个答案:

答案 0 :(得分:2)

如果您的数据库支持正则表达式,则可以用这种方式进行处理。例如:

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

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

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

如果您的数据库不存在,则可以使用REPLACE()

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

答案 1 :(得分:0)

diagram