【问题标题】:Querying combination of two keys in a single JSON column in table in Postgres database查询Postgres数据库表中单个JSON列中两个键的组合
【发布时间】:2021-02-09 20:41:02
【问题描述】:

我正在使用一个数据库(运行 Postgres 13)表,该表有一个 JSON 列,其结构大致如下:

{
  first_name: 'Alex',
  last_name: 'Smith',
  my_other: 'info',
  ...
}

我需要编写一个按用户全名(即"#{first_name} #{last_name}")搜索的查询,但我不知道如何构建一个组合第一个值的“虚拟化”全名列和姓氏键。

【问题讨论】:

    标签: sql json postgresql


    【解决方案1】:

    如果要测试 JSON 列是否同时包含名字和姓氏,可以这样做:

    where the_column @> '{"first_name": "Alex", "last_name": "Smith"}'::jsonb
    

    这假设您的 JSON 列的类型是 jsonb(应该是)。如果不是,则需要强制转换:the_column::jsonb

    【讨论】:

      【解决方案2】:

      您只需使用|| 运算符连接两个值。如果 json 列命名为 col 而表命名为 A 那么你可以这样做:

      SELECT (col->>'first_name') || ' ' || (col->>'last_name') FROM A
      

      ->> 运算符从 json 对象中提取一个字段为text,即,正是您想要的。 (我使用了一些括号,因为现在我不记得 ||->> 之间的优先级)

      另外,请注意,如果您只想检查 json 列是否包含两个属性,则不需要“虚拟化”全名。您可以只使用@>(或<@)运算符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-23
        • 2016-08-27
        • 1970-01-01
        • 2018-11-18
        • 1970-01-01
        • 1970-01-01
        • 2014-07-05
        • 1970-01-01
        相关资源
        最近更新 更多