我看到this question并测试了答案,但注意到执行了SELECT ... WHERE column LIKE "%string%" OR string LIKE CONCAT("%", column, "%")
LIKE CONCAT("%", column, "%")
,则字符串%
不安全;其次,如果列为空,则返回true,这是不正确的,因为该列不包含任何内容。
答案 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。