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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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数据库中搜索符号_Sqlite_Select_Escaping - Fatal编程技术网

在sqlite数据库中搜索符号

在sqlite数据库中搜索符号,sqlite,select,escaping,Sqlite,Select,Escaping,我需要搜索和其中的!@$%^&*'\符号在字段内容sqlite数据库中,我使用以下sql字符串 Select ID From Tasks Where '--' || tasks || '--' || note || '--' like '%! @ # $ % ^ & * ( ) ""%' 或者我试过这个 Select ID From Tasks Where task LIKE '[!] [@] [#] [$] [%] [^] [&] [*] [(] [)] ''%' 但

我需要搜索和其中的!@$%^&*'\符号在字段内容sqlite数据库中,我使用以下sql字符串

Select ID From Tasks Where '--' || tasks || '--' ||  note || '--'  like '%! @ # $ % ^ & * ( ) ""%' 
或者我试过这个

Select ID From Tasks Where task LIKE '[!] [@] [#] [$] [%] [^] [&] [*] [(] [)] ''%'
但搜索不会返回任何结果。对于field task,部分内容包括

今天的任务或任务

这里有一些通配符!@$%^&*'或

有些制动器是[]{}

所以,如果我搜索一个项目作为一个整体,我应该得到它,或者如果我搜索!@$%^&*',我应该买第二项。等

如果我在字段中添加了一些通配符,并以相同的顺序传递文本中的一些通配符或所有通配符,那么应该得到包含该值的行

我知道有些符号在sqlite sql中有意义,那么如何对sql查询字符串中的所有或任何字符进行转义呢

Select ID From Contacts Where (email || mobile || main || other) GLOB '*[!@#$%^&*()\]*'

首先,SQL中的字符串用单引号括起来;如果要编写包含单引号的字符串,必须通过将其加倍来转义:

SELECT ID FROM Tasks WHERE task = 'Today''s tasks'
为了避免这种情况,大多数语言都允许您使用参数:

db.executeSELECT ID FROM Tasks=?,[今天的任务] 其次,LIKE运算符专门解释%和u字符。 要在没有特殊含义的情况下使用这些字符,可以使用指定一个转义为%、\和自身的字符:

SELECT ID FROM Tasks WHERE task LIKE '%! @@ # $ @% ^ & * ( ) ''%' ESCAPE '@'
此转义完全独立于SQL字符串引号;即使使用参数,也必须使用:

db.executeSELECT ID FROM Tasks WHERE task LIKE?逃逸“@”, [ %! @@ $ @% ^ & * '% ] 第三,GLOB操作符没有特殊的转义字符; 你用特殊的文字,你必须用特殊的方式。 从文件中:

环球规则:

“*”匹配零个或多个字符的任意序列。 “?”正好匹配一个字符。 […]匹配所附字符列表中的一个字符。 [^…]匹配一个不在所附列表中的字符。 通过[…]和[^…]匹配,可以包括']'字符 在列表中,使其成为“[”或“^”之后的第一个字符。A 可以使用“-”指定字符范围。例如: [a-z]匹配任何单个小写字母。若要匹配“-”,请使 它是列表中的最后一个字符

提示:要匹配“*”或“?”,请将它们放在[]中。如下所示:

abc[*]xyz仅与abc*xyz匹配


如果你投了反对票,为什么不花几秒钟来解释原因?这不是一个好问题?你的描述很模糊。请给出一些应该和不应该找到的示例数据。@CL,我已经更新了问题,请看谢谢,你的代码似乎找到了任何符号。但问题是我需要搜索任何符号或字段中的所有符号。搜索不是由我创建的,而是由最终用户创建的。因此,他可能会尝试搜索$%^或@。当我搜索所有`!@$%^&*`时,我不会得到结果。我发现GLOB区分大小写,所以这就是我使用LIKE的原因。因此,我只转义@!其他字符可以保持原样?如果是search代表%!$^&*,那么我不需要转义这些字符中的任何一个,对吧?你为什么要提到@?!?LIKE的特殊字符是%和u,以及你选择作为转义字符的任何字符。@CJ非常感谢。所以即使我这样做“%@!@@@$@%@^&*@%”,它也不会有任何负面影响,对吗?你不应该尝试转义cape不需要转义的字符;某些数据库可能会插入转义字符本身。@CJ再次感谢您。我尝试使用此语句从任务(如“%Todays task%”)中选择ID,但找不到该项