В моей таблице есть столбец типа JSON
, который содержит массив объектов, описывающих смещения времени:
[
{
"type": "start"
"time": 1.234
},
{
"type": "end"
"time": 50.403
}
]
Я знаю, что могу извлечь их с JSON_EACH()
и JSON_EXTRACT()
:
CREATE TEMPORARY TABLE Items(
id INTEGER PRIMARY KEY,
timings JSON
);
INSERT INTO Items(timings) VALUES
('[{"type": "start", "time": 12.345}, {"type": "end", "time": 67.891}]'),
('[{"type": "start", "time": 24.56}, {"type": "end", "time": 78.901}]');
SELECT
JSON_EXTRACT(Timings.value, '$.type'),
JSON_EXTRACT(Timings.value, '$.time')
FROM
Items,
JSON_EACH(timings) AS Timings;
Возвращает таблицу вроде:
start 12.345
end 67.891
start 24.56
end 78.901
Что мне действительно нужно, так это:
- Найдите время определенных типов. (Найдите первый объект в массиве, который соответствует условию.)
- Возьмите эти данные и выберите их в виде столбца с остальной таблицей.
Другими словами, я ищу таблицу, которая выглядит следующим образом:
id start end
-----------------------------
0 12.345 67.891
1 24.56 78.901
Я надеюсь на какой-то запрос вроде этого:
SELECT
id,
JSON_EXTRACT(timings, '$.[type="start"].time'),
JSON_EXTRACT(timings, '$.[type="end"].time')
FROM Items;
Есть ли способ использовать path в функциях JSON, чтобы выбрать то, что мне нужно? Или каким-то другим способом изменить то, что я имею в первом примере, чтобы применить к таблице?