#json #postgresql
#json #postgresql
Вопрос:
у меня есть массив json, подобный этому:
[
{
"date": "26/11/2020 23:27",
"note": "test1"
},
{
"date": "22/11/2020 22:59",
"note": "test2"
},
{
"date": "18/11/2020 17:08",
"note": "test3"
}
]
Я хотел бы взять элемент, который содержит самые последние данные.
Мой старый запрос для получения первого элемента был таким:
(notes::json->0)::json->>'note' as note,
(notes::json->0)::json->>'date' as date_note
Ответ №1:
пошаговая демонстрация: db<>скрипка
SELECT
elem.value ->> 'date' as thedate,
elem.value ->> 'note' as note
FROM t,
json_array_elements(data) elem -- 1
WHERE id = 4123
ORDER BY to_timestamp(elem ->> 'date', 'DD/MM/YYYY HH24:MI') DESC -- 2
LIMIT 1 -- 3
- Извлеките все элементы массива в одну строку
- Считайте строку datetime из
date
поля, преобразуйте в временную метку и используйте ее для упорядочивания всех элементов массива с самой последней временной меткой - Просто верните самый первый (= самый последний) элемент массива.
Комментарии:
1. Есть ли какой-нибудь способ изменить этот запрос? выберите (tb.notes::json-> 0)::json->>’примечание’ как примечание, (tb.notes::json-> 0) ::json->>’дата’ как date_note из таблицы как tb, где id = 4545
2. мне нужно напрямую извлечь массив с самой последней датой
3. dbfiddle.uk /… Конечно. Просто добавьте предложение WHERE для фильтрации идентификатора и извлечения элементов из значения