首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何忽略SQL中的符号(如

如何忽略SQL中的符号(如
EN

Stack Overflow用户
提问于 2017-11-02 13:54:45
回答 5查看 7.1K关注 0票数 6

我有一个具有如下SQL查询的搜索模块:

代码语言:javascript
复制
SELECT FROM trilers WHERE title '%something%'

当我搜索关键字(例如“蜘蛛侠”)时,它返回的不是找到,但当我搜索“蜘蛛侠”时,它会返回我的内容( MySQL中的原始行是“蜘蛛侠”)。

我怎么能忽略所有的符号,如-#!:,同时返回“蜘蛛侠”和“蜘蛛侠”关键字的内容?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-11-02 14:00:28

你能做的就是在搜索开始之前替换你不关心的字符。

第一次迭代如下所示:

代码语言:javascript
复制
SELECT * FROM  trilers WHERE REPLACE(title, '-', '') LIKE '%spiderman%'

这会忽略任何“-”。

接下来,您将使用另一个替换,包括“#”如下:

代码语言:javascript
复制
SELECT * FROM  trilers WHERE REPLACE(REPLACE(title, '-', ''), '#', '') LIKE '%spiderman%'

对于所有3个(“!”、“-”、“#”),您只需使用另一个替换,如下所示:

代码语言:javascript
复制
SELECT * FROM  trilers WHERE REPLACE(REPLACE(REPLACE(title, '-', ''), '#', ''),'!','') LIKE '%spiderman%'
票数 8
EN

Stack Overflow用户

发布于 2017-11-02 14:03:46

你可以试试

SELECT * FROM trilers WHERE replace(title, '-', '') LIKE '%spiderman%'

票数 1
EN

Stack Overflow用户

发布于 2017-11-02 13:57:51

其他涉及使用REPLACE的答案是很好的,但是如果您不关心在“蜘蛛”和"man“之间出现了哪些字符,或者两个字符串之间有多少个字符,那么您可以在表达式中使用一个额外的通配符:

代码语言:javascript
复制
SELECT * FROM Superheroes WHERE HeroName LIKE '%spider%man%';

如果只想匹配一个字符,但允许任何字符,则可以使用 wildcard,它只匹配一个字符:

代码语言:javascript
复制
SELECT * FROM Superheroes WHERE HeroName LIKE '%spider_man%';

这将匹配“蜘蛛侠”和“拉大陆的蜘蛛侠”,而不是“蜘蛛侠”。

如果您有有限数量的可能符号,那么不使用REPLACE的一种方法是使用一个析取表达式:

代码语言:javascript
复制
SELECT * FROM Superheroes WHERE
    HeroName LIKE '%spiderman%'
OR
    HeroName LIKE '%spider-man%'
OR
    HeroName LIKE '%spider#man%'
OR
    HeroName LIKE '%spider!man%';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47077077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档