如何询问SQLite列是否包含字符串?
通常,为了询问SQLite列是否包含字符串,我会使用以下行的查询:如何询问SQLite列是否包含字符串?,sql,sqlite,pattern-matching,Sql,Sqlite,Pattern Matching,通常,为了询问SQLite列是否包含字符串,我会使用以下行的查询:SELECT*FROM table WHERE column,比如“%”| |?| |“%” 主要问题是如果我搜索的字符串是% 当前,我使用类似于str_replace(搜索“%”,“%%”)的方法对正在搜索的字符串进行转义。当我应用于简单的%%字符串时,会产生一个类似的%%%字符串,即两个转义百分比。此外,对于以转义字符开头的字符串(例如,%hello)发生的情况将导致%%%hello,它是一个转义的%%,后跟任意数量的字符,后
SELECT*FROM table WHERE column,比如“%”| |?| |“%”代码>
主要问题是如果我搜索的字符串是%
当前,我使用类似于str_replace(搜索“%”,“%%”)
的方法对正在搜索的字符串进行转义。当我应用于简单的%%
字符串时,会产生一个类似的%%%
字符串,即两个转义百分比。此外,对于以转义字符开头的字符串(例如,%hello
)发生的情况将导致%%%hello
,它是一个转义的%%
,后跟任意数量的字符,后跟hello
我可以改变转义字符,但是新的转义字符也会有同样的问题
注意:我知道我可以使用instr,但我想知道是否有一种解决方法可以使用LIKE。您不能通过将LIKE模式字符加倍来转义它们
根据,可以添加转义子句来定义删除以下字符特殊含义的字符:
SELECT * FROM MyTable WHERE MyColumn LIKE '%' || ? || '%' ESCAPE '@'
然后必须将搜索字符串%hello
转义为@%hello
;类似地,chacham15@example.org
必须作为chacham15@@example.org
转义,我明白了,这是有道理的。谢谢你消除了这种混乱。如果通配符恰好是转义符呢?在这种情况下,%%将有效地转换为%.@CL。单引号是通过将它们加倍来转义的。SQL的字符串解析和LIKE的模式匹配工作方式不同。