【问题标题】:Postgres jsonb : cast array element to integerPostgres jsonb:将数组元素转换为整数
【发布时间】:2020-02-14 21:57:22
【问题描述】:

使用 Postgres 11.2.9 (ubuntu),

在我的数据库中,我有一个 jsonb 字段,其中包含如下所示的值: [1618171589133, 1618171589245, 1618171589689]

我想检索第一个元素低于特定值的行。我试过这个:

SELECT * FROM user.times WHERE time ->> 0 < 1618171589133

但我收到以下错误:ERROR: operator does not exist: text = bigint

我应该以某种方式将时间值转换为数值吗?我试过time ->> 0::numeric,但实际上我不知道该怎么做。

【问题讨论】:

  • 你试过time -> 0 < 1618171589133 吗?看这里postgresql.org/docs/9.5/functions-json.html 使它看起来像->> 故意返回文本而不是数值
  • @GSP 公平点,但我认为我仍然必须将其转换为 bigint,time -> 0 < 1618171589133 返回错误operator does not exist: jsonb <= bigint

标签: postgresql jsonb


【解决方案1】:

->> 运算符将给定位置的元素作为文本返回,然后您可以将其转换为整数(或在本例中看起来为 bigint),就像您通常在 postgres 中所做的那样,使用 :: 作为后缀。

SELECT * FROM user.times WHERE ((time ->> 0)::bigint) < 1618171589133

【讨论】:

  • 为了解释为什么这样有效,:: 绑定比-&gt;&gt; 更紧密,所以他的原始代码只是将 0 转换为数字,然后使用数字 0 来索引到 jsonb。
猜你喜欢
  • 2015-10-24
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 2015-07-12
  • 2021-01-08
  • 2021-03-07
  • 2012-10-09
  • 2021-05-29
相关资源
最近更新 更多