2015-03-20 5 views
1

Как мне динамически SELECT последнее значение массива в столбце типа JSON в PostgreSQL?PostgreSQL динамически SELECT последнее значение json array

id: 2927 
material_size: [".016 x 1.156","0","1"] 

Я мог статический получить последнее значение «1» с помощью:

SELECT material_size->>2 AS material_size FROM table_name; 

Однако то, что всегда будет получить вторую запись вместо последней записи (если число значений не является ровно три).

+1

Чтобы быть точным: 'material_size - >> 2' будет получить * третий элемент *, а не ' вторая запись '. –

ответ

1

Вы можете получить длину массива JSON и использовать его (минус один) в качестве индекса:

with t1 as (select 2927 id, '[".016 x 1.156","0","1"]'::json material_size) 
select material_size->>(json_array_length(material_size)-1) from t1; 

См http://www.postgresql.org/docs/9.4/static/functions-json.html.

+0

... почему вы предполагаете, что у меня есть данные из базы данных * до * Я сделал запрос? – John

+0

Я не уверен, что вы имеете в виду ... вы имеете в виду CTE? Это было просто для демонстрационных целей (чтобы сделать это [самодостаточным примером] (http://meta.stackexchange.com/questions/22754/sscce-how-to-provide-examples-for-programming-questions)). И само решение просто повторно использует столбец 'material_size', поэтому он не вытягивает/использует данные, которые не получены из запроса ... – bgoldst

+0

Хорошо; Я должен вернуться к этому скоро, чтобы проверить и принять, спасибо! – John

1

Вы можете использовать отрицательный индекс для запроса элементов в значении JSON с конца:

SELECT material_size->>-1 AS material_size FROM table_name; 
Смежные вопросы