2016-11-27 109 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:這是正確的舉措。不過,不會改變這個問題。 –

相關問題