在JSON列类型中查找数组的最后一个元素

时间:2016-11-27 02:07:22

标签: arrays json postgresql

以下是Postgres 9.4.4中存储为数据类型json的数据示例:

[
  1479772800000,
  70.12
],
[
  1479859200000,
  70.83
],
[
  1480032000000,
  71.23
]

如何选择此数组的最后一个元素:[1480032000000,71.23]

 \d stocks
                                     Table "public.stocks"
      Column      |         Type         |                      Modifiers                      
------------------+----------------------+-----------------------------------------------------
 id               | integer              | not null default nextval('stocks_id_seq'::regclass)
 ticker           | character varying(6) |  
 price_history    | json                 | 
Indexes:
    "stocks_pkey" PRIMARY KEY, btree (id)
    "ix_stocks_ticker" UNIQUE, btree (ticker)

2 个答案:

答案 0 :(得分:2)

您可以通过执行(已知在Postgres 9.5 +中工作)获取Postgres JSON数组的最后一个元素:

select '...'::json->-1;

这使用->运算符。负整数从最后算起。

例如:

select '[[1479772800000, 70.12], [1479859200000, 70.83], [1480032000000, 71.23]]'::json->-1;

答案 1 :(得分:1)

Postgres 9.5会更好,例如@Simeon provided

您可以使用json_array_length() in Postgres 9.4,因为-> operator不允许使用否定索引。

SELECT j -> -1                       AS pg95
     , j -> json_array_length(j) - 1 AS pg94
FROM (SELECT '[[1479772800000, 70.12]
             , [1479859200000, 70.83]
             , [1480032000000, 71.23]]'::json) t(j);

-1因为JSON数组索引是从0开始的(与基于1的Postgres数组不同)。