Задать вопрос
@SanekIrk

MySQL JSON_OBJECT Приводит значение к строковому типу, возможно ли это как то обойти?

Выполняю запрос вот такого типа:
SELECT
    JSON_OBJECT(
        1,
        (
            CASE 'one'
                WHEN 'one' THEN JSON_ARRAY(1, 2)
                WHEN 'two' THEN 1
            END
        )
    );
> {"1": "[1, 2]"}

Массив оборачивается в строку.
А если выполнить так:
SELECT
    JSON_OBJECT(
        1,
        (
            CASE 'one'
                WHEN 'one' THEN JSON_ARRAY(1, 2)
            END
        )
    );
> {"1": [1, 2]}

На выходе нормальный массив.
Возможно ли избежать приведение к строке, когда `CASE WHEN` возвращает разные типы данных?
  • Вопрос задан
  • 89 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@SanekIrk Автор вопроса
Смог добиться нужного результата путём оборачивания строки (или любой другой не json тип) в кавычки, а потом конвертируя результат в json. Теперь весь `CASE WHEN` стал возвращать json:
SELECT
    JSON_OBJECT(
        1,
        (
            CASE 'one'
                WHEN 'one' THEN JSON_ARRAY(1, 2)
                WHEN 'two' THEN CONVERT(JSON_QUOTE('1'), JSON)
            END
        )
    );

По скорости выполнения запроса сильных просадок не заметил.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы