2016-11-27 136 views
1

以下是作为数据存储类型json 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) 

回答

1

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

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

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

例如:

select '[[1479772800000, 70.12], [1479859200000, 70.83], [1480032000000, 71.23]]'::json->-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阵列)。

+0

太晚我升级了postgres版本! –

+1

@JZ:这是正确的举措。不过,不会改变这个问题。 –