0

我需要在字段内容 sqlite 数据库中搜索这些! @ # $ % ^ & * ( ) '\符号,我正在使用以下 sql 字符串

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 个项目。等等

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

我知道某些符号在 sqlite sql 中有意义,那么如何在 sql 查询字符串中转义所有或任何这些字符

4

2 回答 2

1

我会用这个:

Select ID From Contacts Where (email || mobile || main || other) GLOB '*[!@#$%^&*()\]*'
于 2013-02-12T06:31:00.110 回答
1

首先,SQL中的字符串用单引号括起来;如果你想写一个包含单引号的字符串,你必须通过加倍来转义它们:

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

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

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

其次,LIKE操作员对%_字符进行特殊解释。要在没有特殊含义的情况下使用这些字符,您可以使用该ESCAPE子句指定转义 、 和自身的%字符_

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

这种转义完全独立于 SQL 字符串引用;即使您使用参数,您仍然必须使用:

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

第三,GLOB操作符没有特殊的转义字符;你从字面上使用特殊字符,你必须以特殊的方式使用它们。从文档中:

通配规则:

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

使用[...]and[^...]匹配,可以将一个字符作为or']'之后的第一个字符包含在列表中。可以使用 指定字符范围。示例: 匹配任何单个小写字母。要匹配 a ,请将其设为列表中的最后一个字符。'[''^''-'"[a-z]"'-'

提示:匹配'*''?',将它们放入"[]"。像这样:

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

于 2013-02-15T12:44:35.880 回答