通常,为了询问SQLite列是否包含字符串,我将使用以下行查询:SELECT * FROM table WHERE column LIKE '%' || ? || '%'
。
主要问题是如果我要搜索的字符串是%
?
我目前正在使用类似str_replace(search, '%, '%%')
的字符串转义我正在搜索的字符串。当我申请%
这个简单的字符串时,这个字符串就像%%%%
一样,是两个逃逸的百分比。此外,对于以转义字符开头的字符串会发生什么,例如%hello
会导致%%%hello
转义为%
,后跟任意数量的字符,然后是问候语。
我可以更改转义字符,但是新的转义字符会出现同样的问题。
注意:我知道我可以使用instr,但我想知道是否有这样的解决方案。
答案 0 :(得分:1)
您只能将它们加倍来逃避LIKE模式字符_
和%
。
根据the documentation,您可以添加一个ESCAPE子句来定义一个删除以下字符特殊含义的字符:
SELECT * FROM MyTable WHERE MyColumn LIKE '%' || ? || '%' ESCAPE '@'
然后搜索字符串%hello
必须转义为@%hello
;同样,chacham15@example.org
必须以chacham15@@example.org
转义。