如何忽略SQL中的符号LIKE

时间:2017-11-02 13:54:46

标签: mysql sql

我有一个带有SQL查询的搜索模块,如下所示:

SELECT FROM trilers WHERE title '%something%'

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

如何忽略所有符号,例如-#!:,并在同一时间返回带有“spiderman”和“spider-man”关键字的内容时间?

5 个答案:

答案 0 :(得分:4)

您可以做的是在搜索之前替换您不关心的字符。

第一次迭代看起来像这样:

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

这会忽略任何' - '。

接下来你会用另一个REPLACE来说明#'#'像这样:

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

对于所有3个(&#39;!&#39;,&#39; - &#39;,&#39;#&#39;)您只需将替换为另一个替换,如下所示:< / p>

SELECT * FROM  trilers WHERE REPLACE(REPLACE(REPLACE(title, '-', ''), '#', ''),'!','') LIKE '%spiderman%'

答案 1 :(得分:1)

您可以尝试类似

的内容

<div class="col-md-12 col-sm-12 col-xs-12 nopadding" style="margin-bottom: 15px; position: relative;"> <img src="assets/img/klupa_fontana.jpg" class="img-fluid"> <div style="position: absolute; top: 10%; left: 50%; transform: translate(-50%, -50%);"> <span style="color: #fff; font-size: 60px; line-height: 1.07143; font-weight:400;"> Lorem ipsum dolor</span><br><br> </div> <div class="col-md-6 col-sm-12 col-xs-12"> <div style="position: absolute; top: 15%; left: 2%;"> <span style="color: #fff; font-size: 50px; line-height: 1.07143; font-weight: 300;"> Lorem ipsum dolor.</span><br><br> <span style="color: #fff; font-size: 40px; line-height: 1.07143; font-weight: 300;"> Lorem ipsum dolor Lorem ipsum dolor<br> Lorem ipsum dolor Lorem ipsum dolor.</span> </div> </div> <div class="col-md-6 col-sm-12 col-xs-12"> <div style="position: absolute; top: 15%; right: 2%; text-align: right"> <span style="color: #fff; font-size: 50px; line-height: 1.07143; font-weight: 300;"> Lorem ipsum dolor Lorem ipsum dolor <br> fast and safe.</span><br><br> <span style="color: #fff; font-size: 40px; line-height: 1.07143; font-weight: 300;"> Lorem ipsum dolor Lorem ipsum dolor<br> Lorem ipsum dolor Lorem ipsum dolor<br> Lorem ipsum dolor Lorem ipsum dolor</span> </div> </div> </div>

答案 2 :(得分:0)

涉及使用REPLACE的其他答案很棒,但如果您不在乎“蜘蛛”和“男人”之间出现的字符或两个字符串之间有多少个字符,则可以使用额外的表达式中的通配符:

SELECT * FROM Superheroes WHERE HeroName LIKE '%spider%man%';

如果您只想匹配一个字符,但允许任何字符,则可以使用仅匹配一个字符的_ wildcard

SELECT * FROM Superheroes WHERE HeroName LIKE '%spider_man%';

这将匹配“spideryman”和“la la land”中的“蜘蛛侠”,而不是“spiderysupereliteuberheroman”。

如果您的可能符号数量有限,那么在没有REPLACE的情况下执行此操作的方法是使用析取表达式:

SELECT * FROM Superheroes WHERE
    HeroName LIKE '%spiderman%'
OR
    HeroName LIKE '%spider-man%'
OR
    HeroName LIKE '%spider#man%'
OR
    HeroName LIKE '%spider!man%';

答案 3 :(得分:0)

WHERE trilers REGEXP '[[:<:]]spider[-#!:]?man[[:>:]]'

一些讨论:

[[:<:]] -- word boundary
[-#!:]  -- character set, matches any of them.  ('-' must be first)
[-#!:]? -- optional -- so that 'spiderman' will still match

与其他答案不同,这将避免匹配

spidermaniac

另外,请考虑使用FULLTEXT

答案 4 :(得分:-1)

您应该能够通过小更新来使用搜索。您应该可以执行以下操作:SELECT FROM trilers WHERE title LIKE'%spider%'。这应该搜索蜘蛛在其他东西之前或之后的任何东西,如连字符( - )