В MySQL pre-8.0 нет простого способа превратить массив JSON в набор записей (т. Е. Функция JSON_TABLE()
еще не доступна).
Итак, так или иначе, нам нужновручную выполнить итерацию по массиву для извлечения соответствующих фрагментов данных (используя JSON_EXTRACT()
).Вот решение, которое использует встроенный запрос для генерации списка чисел;Другой классический подход - использовать числовые таблицы.
Предполагается, что таблица с именем mytable
содержит столбец с именем js
, содержащий содержимое JSON:
SELECT
JSON_EXTRACT(js, CONCAT('$[', n.idx, '].TaskID')) TaskID,
JSON_EXTRACT(js, CONCAT('$[', n.idx, '].Elapsed')) Elapsed
FROM mytable t
CROSS JOIN (
SELECT 0 idx
UNION ALL SELECT 1
UNION ALL SELECT 2
UNION ALL SELECT 3
) n
WHERE JSON_EXTRACT(js, CONCAT('$[', n.idx, '].Elapsed')) * 1.0 > 30
Примечание: в WHERE
предложение, операция * 1.0
предназначена для принудительного преобразования в число.
Демонстрация на DB Fiddle с примерами данных:
| TaskID | Elapsed |
| -------------- | ------- |
| TAS00000012346 | 35 |
| TAS00000012347 | 40 |