MySQL选择查询无法搜索符号字符串

时间:2019-05-11 10:49:48

标签: mysql

例如,如果我想在下面搜索。

> lav'ro (I can't search it by "lav'r" because of ' in the string)     
> am[op]st (I can't search it by "am[o" because of [ in the string)

我的问题是如何使用选择查询,以便帮助我带来输出?

下面是我的SELECT查询。

SELECT * FROM TableName 
WHERE (Col1 LIKE '%$value%' OR Col2 LIKE '%$value%') 
ORDER BY 
    CASE WHEN (Col1 LIKE '$value' AND Col2 LIKE '$value') THEN 1 
         WHEN Col1 LIKE '$value' THEN 2 
         WHEN Col2 LIKE '$value' THEN 3 
         WHEN Col1 LIKE '$value%' THEN 4 
         WHEN Col2 LIKE '$value%' THEN 5 
         WHEN Col1 LIKE '%$value' THEN 6 
         WHEN Col2 LIKE '%$value' THEN 7 
         WHEN Col1 LIKE '%$value%' THEN 8 
         WHEN Col2 LIKE '%$value%' THEN 9 
         ELSE 10 
    END asc, 
    length(Col1 or Col2) limit 15

在此处搜索“ $ value” 个动态词。

运行正常,在普通搜索中出现符号搜索问题。

2 个答案:

答案 0 :(得分:1)

您必须在单引号前加上\才能使它起作用

SELECT a.*, 3 - counter AS remaining_reviews, IFNULL(tl.already_reviewed, '') AS already_reviewed
FROM accounts AS a
LEFT JOIN (
    SELECT account_id, GROUP_CONCAT(team_id ORDER BY team_id) AS already_reviewed
    FROM team_logs
    GROUP BY account_id) AS tl ON a.id = tl.account_id
WHERE a.counter < 3

对于第二期,请尝试在%之前或之后附加

SELECT * FROM `table` WHERE `column` LIKE 'lav\'ro'

答案 1 :(得分:1)

您不必使用like。您可以只使用instr()=

where instr(col1, ?) > 0

在需要like和正则表达式以实现其模式匹配功能时使用它们。

而且-记录下来,在字符串中搜索单引号没有问题。唯一的问题是表达字符串。为此,请加倍单引号:

where col1 like concat(?, '%')

在传递带有单引号的参数时有效。这也可以:

where col1 like 'lav''r%'