2013-02-12 61 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