【问题标题】:Get records with empty hstore获取空 hstore 的记录
【发布时间】:2014-06-29 12:11:15
【问题描述】:

我正在使用带有 hstore 扩展名的 PostgreSQL 数据库,我正在尝试做一个最简单的事情 - 获取所有记录,其中 vd_data (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 中的外观?

【问题讨论】:

    标签: postgresql activerecord pg hstore


    【解决方案1】:

    {} 不是HSTORE 的有效表达式。

    改为使用表达式hstore('') 甚至简单的'' 来表示空的HSTORE,如下所示:

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

    SQLFiddle Demo 中的证明。

    【讨论】:

    • 哦,现在我明白了。我正在尝试Video.where('vd_data != ""'),它给了我一个语法错误,所以我离开了那个轨道。太好了,谢谢!
    • 与 MySQL 或 SQLite 不同,在 PostgreSQL 中使用单引号和双引号有很大的不同。要表示字符串值,您必须始终使用单引号。要转义标识符名称,您必须使用双引号。
    猜你喜欢
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多