我有一个具有如下SQL查询的搜索模块:
SELECT FROM trilers WHERE title '%something%'当我搜索关键字(例如“蜘蛛侠”)时,它返回的不是找到,但当我搜索“蜘蛛侠”时,它会返回我的内容( MySQL中的原始行是“蜘蛛侠”)。
我怎么能忽略所有的符号,如-,#,!,:,同时返回“蜘蛛侠”和“蜘蛛侠”关键字的内容?
发布于 2017-11-02 14:00:28
你能做的就是在搜索开始之前替换你不关心的字符。
第一次迭代如下所示:
SELECT * FROM trilers WHERE REPLACE(title, '-', '') LIKE '%spiderman%'这会忽略任何“-”。
接下来,您将使用另一个替换,包括“#”如下:
SELECT * FROM trilers WHERE REPLACE(REPLACE(title, '-', ''), '#', '') LIKE '%spiderman%'对于所有3个(“!”、“-”、“#”),您只需使用另一个替换,如下所示:
SELECT * FROM trilers WHERE REPLACE(REPLACE(REPLACE(title, '-', ''), '#', ''),'!','') LIKE '%spiderman%'发布于 2017-11-02 14:03:46
你可以试试
SELECT * FROM trilers WHERE replace(title, '-', '') LIKE '%spiderman%'
发布于 2017-11-02 13:57:51
其他涉及使用REPLACE的答案是很好的,但是如果您不关心在“蜘蛛”和"man“之间出现了哪些字符,或者两个字符串之间有多少个字符,那么您可以在表达式中使用一个额外的通配符:
SELECT * FROM Superheroes WHERE HeroName LIKE '%spider%man%';如果只想匹配一个字符,但允许任何字符,则可以使用 wildcard,它只匹配一个字符:
SELECT * FROM Superheroes WHERE HeroName LIKE '%spider_man%';这将匹配“蜘蛛侠”和“拉大陆的蜘蛛侠”,而不是“蜘蛛侠”。
如果您有有限数量的可能符号,那么不使用REPLACE的一种方法是使用一个析取表达式:
SELECT * FROM Superheroes WHERE
HeroName LIKE '%spiderman%'
OR
HeroName LIKE '%spider-man%'
OR
HeroName LIKE '%spider#man%'
OR
HeroName LIKE '%spider!man%';https://stackoverflow.com/questions/47077077
复制相似问题