2010-09-10 130 views
3

嘗試this answer,並沒有任何運氣:如何在SQLite中使用ESCAPE?

我使用SQLite數據庫瀏覽器(與SQLite的引擎的3.3.5建)執行此查詢:

SELECT columnX FROM MyTable 

WHERE columnX LIKE '%\%16' ESCAPE '\' 

在列X我有一行數據:sampledata%167

我執行語句並得到沒有數據返回,但沒有錯誤嗎?

http://www.sqlite.org/lang_expr.html

(與SQLite的C API)

+0

你在做什麼看起來像是一個SQL注入攻擊的理想場所。請重新考慮這一點,而不是使用參數。 – 2010-09-10 22:10:45

+0

@Steven Sudit:沒錯,但是這是一個內部數據庫.... – 2010-09-10 22:11:44

+0

那麼,內部威脅比外部更可能。 – 2010-09-10 22:16:10

回答

6

我認爲這個問題是您缺少從圖案的末尾%

'%\%16%' 

而且反斜槓往往導致各種編程語言和工具的混亂,尤其是如果有解析參與前查詢獲取到數據庫的多個級別。爲簡單起見,你可以嘗試不同的轉義字符來代替:在%167

WHERE columnX LIKE '%!%16%' ESCAPE '!' 
+0

嗯相同的結果,它不能像ESCAPE?但它表明它支持它?是我的語法與引號,雙引號的組合? – 2010-09-10 22:10:46

+0

@馬克拜爾斯:ahhh,是啊忘了尾隨的'%' – 2010-09-10 22:20:17

+0

@MarkByers我可以逃脫多個字符,如ESCAPE'〜','@'等 – Smith 2013-02-12 07:13:04

1

你的樣本數據結束,但您的查詢僅匹配事情結束%16。根據您的需要,您可能需要根據數據更改查詢以獲得尾隨%或以167結尾。

當我嘗試這在SQLite的,它工作得很好:

sqlite> create table foo (bar text); 
sqlite> insert into foo (bar) values ('sampledata%167'); 
sqlite> select * from foo where bar like '%\%16' escape '\'; 
sqlite> select * from foo where bar like '%\%167' escape '\'; 
sampledata%167 

你可能想嘗試在SQLite的外殼,這個實驗,在一個簡單的例子表像我秀,看看您的問題仍然存在。

+0

謝謝,就是這樣... – 2010-09-10 22:20:53