如果列包含字符串,如何询问SQLite?

时间:2014-07-11 07:33:33

标签: sql sqlite pattern-matching

通常,为了询问SQLite列是否包含字符串,我将使用以下行查询:SELECT * FROM table WHERE column LIKE '%' || ? || '%'

主要问题是如果我要搜索的字符串是%

我目前正在使用类似str_replace(search, '%, '%%')的字符串转义我正在搜索的字符串。当我申请%这个简单的字符串时,这个字符串就像%%%%一样,是两个逃逸的百分比。此外,对于以转义字符开头的字符串会发生什么,例如%hello会导致%%%hello转义为%,后跟任意数量的字符,然后是问候语。

我可以更改转义字符,但是新的转义字符会出现同样的问题。

注意:我知道我可以使用instr,但我想知道是否有这样的解决方案。

1 个答案:

答案 0 :(得分:1)

您只能将它们加倍来逃避LIKE模式字符_%

根据the documentation,您可以添加一个ESCAPE子句来定义一个删除以下字符特殊含义的字符:

SELECT * FROM MyTable WHERE MyColumn LIKE '%' || ? || '%' ESCAPE '@'

然后搜索字符串%hello必须转义为@%hello;同样,chacham15@example.org必须以chacham15@@example.org转义。