2013-02-12 62 views
0

我需要寻找一个字段内容SQLite数据库中的这些! @ # $ %^& * () '\符号和,我使用下面的SQL字符串在SQLite数据库寻找符号

Select ID From Tasks Where '--' || tasks || '--' || note || '--' like '%! @ # $ %^& * () ""%' 

或我想这

Select ID From Tasks Where task LIKE '[!] [@] [#] [$] [%] [^] [&] [*] [(] [)] ''%' 

但搜索不会返回任何结果。对于现场task一些内容是

  1. Today's tasks

  2. here are some wildcards ! @ # $ %^& * () '

  3. Some brakest are [ ] { } ()

所以,如果我的搜索项一个整体,我得到它或如果我搜索! @ # $ %^& * () ',我应该得到项目2. etc

,如果我西拉经过一些通配符以相同的顺序将文本或内的所有领域内,我应该得到该行包含值

我知道的一些符号的sqlite的SQL具有意义,所以我如何逃避这些字符的全部或任何一个SQL查询字符串

+0

如果你是反对投票,你为什么不采取一些秒来解释为什么?它不是一个好问题? – Smith 2013-02-12 06:14:16

+0

你的描述很模糊。请显示一些应该和不应该找到的示例数据。 – 2013-02-15 11:34:00

+0

@CL,我已更新的问题,请看看 – Smith 2013-02-15 12:02:11

回答

1

首先,在SQL字符串用单引号;如果你想写包含单引号的一个字符串,你必须通过他们加倍逃避他们:

SELECT ID FROM Tasks WHERE task = 'Today''s tasks' 

为了避免这种情况,大多数语言允许你使用参数:

db.execute("SELECT ID FROM Tasks WHERE task = ?", [ "Today's tasks" ]) 

二,LIKE运算符专门解释%_字符。 要使用这些字符没有自己特殊的含义,你可以使用ESCAPE clause指定逃脱%_字符,本身:

SELECT ID FROM Tasks WHERE task LIKE '%! @@ # $ @%^& * () ''%' ESCAPE '@' 

这转义是从SQL字符串引用完全独立;你STIL你使用,甚至如果你使用参数:

db.execute("SELECT ID FROM Tasks WHERE task LIKE ? ESCAPE '@'", 
      [ "%! @@ # $ @%^& * () '%" ]) 

三,GLOB运营商不具有特殊的转义字符; 你直接使用特殊字符,你必须以特殊的方式使用它们。 从文档:

通配符规则:

  • '*'匹配的零个或多个字符的任何序列。
  • '?'完全匹配一个字符。
  • [...]匹配所附字符列表中的一个字符。
  • [^...]匹配不在封闭列表中的一个字符。

随着[...][^...]匹配,一个']'字符可以通过使它'[''^'后的第一个字符被包括在列表中 。 A 字符范围可以使用'-'指定。例如: "[a-z]"匹配任何单个小写字母。要匹配'-',请将 它作为列表中的最后一个字符。

提示:匹配'*''?',把它们放在"[]"。就像这样:

abc[*]xyz匹配"abc*xyz"只有

+0

我发现GLOB '是区分大小写的,所以这就是我使用'LIKE'的原因,所以我只能转义'@,!'其他字符可以保持原样?如果我搜索'%!#$ ^&*()'' ,那么我不需要转义任何这些字符 – Smith 2013-02-15 13:00:12

+1

为什么你提到'@ ,!'?'LIKE'的特殊字符是'%'和'_',以及您选择的任何字符作为转义字符 – 2013-02-15 13:17:59

+0

@ CJ非常感谢你,所以即使我这样做'%@!@@ @#$ @%@^@&@ * @(@)''%'',它的剂量会有任何不良影响 – Smith 2013-02-15 14:26:12

1

我这样做:

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

谢谢,你的代码似乎找到任何符号。但问题是我需要搜索字段中的任何或全部符号。搜索不是由我构建的,而是由最终用户构建的。所以他可能会尝试serahc''%^'或'@)('。当我搜索所有'!@#$%^&*()\',我没有得到结果 – Smith 2013-02-12 06:46:13