Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何询问SQLite列是否包含字符串?_Sql_Sqlite_Pattern Matching - Fatal编程技术网

如何询问SQLite列是否包含字符串?

如何询问SQLite列是否包含字符串?,sql,sqlite,pattern-matching,Sql,Sqlite,Pattern Matching,通常,为了询问SQLite列是否包含字符串,我会使用以下行的查询:SELECT*FROM table WHERE column,比如“%”| |?| |“%” 主要问题是如果我搜索的字符串是% 当前,我使用类似于str_replace(搜索“%”,“%%”)的方法对正在搜索的字符串进行转义。当我应用于简单的%%字符串时,会产生一个类似的%%%字符串,即两个转义百分比。此外,对于以转义字符开头的字符串(例如,%hello)发生的情况将导致%%%hello,它是一个转义的%%,后跟任意数量的字符,后

通常,为了询问SQLite列是否包含字符串,我会使用以下行的查询:
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的模式匹配工作方式不同。