2014-05-12 64 views
3

我使用PostgreSQL數據庫並使用hstore擴展名,並試圖使最簡單的事情成爲可能 - 獲取所有記錄,其中vd_data (hstore)列爲空({})。使用空hstore獲取記錄

這聽起來很簡單,但我無法自己做,也沒有在互聯網上找到任何有關它。我用它在我的Rails應用程序,所以我會使用ActiveRecord DSL張貼一些例子:

Video.where('vd_data != NULL') 
# => [] (empty result. I have about 20 videos with vd_data populated in my db) 

Video.where('vd_data != {}') 
# => Syntax error 

Video.where('vd_data != ""') 
# => ERROR: zero-length delimited identifier at or near """" 

誰能告訴我應該上查詢怎麼這麼看在純SQL?

回答

3

{}HSTORE無效。

相反,使用表達hstore('')甚至根本''來表示空HSTORE,像這樣:

Video.where("vd_data != ''") 

證明在SQLFiddle Demo

+0

哦,現在我明白了。我正在嘗試'Video.where('vd_data!=「」')',它給了我一個語法錯誤,所以我離開了這個軌道behing。太好了謝謝! – mbajur

+2

與MySQL或SQLite不同,PostgreSQL在使用單引號和雙引號時有很大的區別。要表示字符串值,您必須始終使用單引號。要轉義標識符名稱,您必須使用雙引號。 – mvp