2015-04-17 96 views
0

當我嘗試查找details表中存在Linux列的所有記錄時,該列中存在數組列operating_systems如何在Postgresql查詢中處理單引號

查詢select * from details where 'Linux' = ANY(operating_systems);完美工作,並返回operating_systems列中有Linux的所有記錄。

但是,如果我想獲得I don't know存在於operating_systems中的所有記錄,我無法形成正確的查詢。

查詢select * from details where 'I don\'t know' = ANY(operating_systems);不會逃避單引號並將其從字面上取出,從而導致不完整的查詢。

回答

0

發現單引號可以通過在其之前添加另一個單引號來轉義。所以select count(*) from details where 'I don''t know' = ANY(operating_systems);的作品。

+0

http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS –

1

發現單引號可以通過在其之前添加另一個單引號來轉義。所以select count(*) from details where 'I don''t know' = ANY(operating_systems);的作品。

這對於即席查詢或數據文字硬編碼查詢是可以接受的。

這是絕對不行如果字符串來自應用程序用戶。不要這樣做。爲什麼請參閱http://bobby-tables.com/

使用參數化查詢(經常被錯誤地稱爲準備語句,雖然他們不太一樣的東西)。具體怎麼做取決於你沒有提到的編程語言和客戶端,但它通常涉及到「準備」一個語句,然後用參數執行它。

相關問題