从 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'), '%')
我正在 运行 宁 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'), '%')