检查字符串是否包含列的任何字符串,反之亦然的条件是什么?

时间:2016-01-26 05:42:05

标签: mysql sql

我看到this question并测试了答案,但注意到执行了SELECT ... WHERE column LIKE "%string%" OR string LIKE CONCAT("%", column, "%")

如果列的值包含LIKE CONCAT("%", column, "%"),则

字符串%不安全;其次,如果列为空,则返回true,这是不正确的,因为该列不包含任何内容。

1 个答案:

答案 0 :(得分:1)

你可以逃脱百分号,如果存在的话:

SELECT column1
FROM table
WHERE (
    column2 LIKE "%string%"
    OR string LIKE CONCAT("%", REPLACE(column2, '%', '|%'), "%") ESCAPE |
    )
    AND column2 IS NOT NULL;

默认转义字符是反斜杠,但这不符合ANSI标准,如果您使用其他语言构建查询,则可能会很麻烦。所以我使用LIKE ... ESCAPE syntax指定我自己的转义。

CONCAT()会返回NULL if any of its arguments are null,因此,如果您对此感到担忧,请check for it