0

我在 postgresql 数据库中有一个表,其中一个字段为 json 格式。它看起来像这样:

[
  {
    "transition": "transition1",
    "from": "step1",
    "to": "step2",
    "date": {
      "date": "2021-01-30 15:34:06.840859"
    }
  },
  {
    "transition": "transition2",
    "from": "step2",
    "to": "step3",
    "date": {
      "date": "2021-01-30 16:52:00.412208"
    }
  }
]

我想有一个带有过渡日期的新列1。我尝试了很多东西,但我不知道如何提取这个日期,我不能使用索引,因为转换的数量不固定,一些用户可能有 3 个,而其他的超过 10 个。

4

1 回答 1

2

您需要遍历所有数组元素以找到正确的元素:

select (select (item -> 'date' ->> 'date')::timestamp
        from jsonb_array_elements(jsonb_column) as x(item)
        where item ->> 'transition' = 'transition1') as transition_date
from the_table
;

如果您的列被定义为json而不是jsonb(应该是),则需要使用json_array_elements()

于 2021-02-18T15:19:42.083 回答