Задать вопрос
@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` возвращает разные типы данных?
  • Вопрос задан
  • 123 просмотра
Подписаться 2 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Shultais Education
    Основы SQL
    3 месяца
    Далее
  • Shultais Education
    Продвинутый SQL
    1 месяц
    Далее
  • Merion Academy
    Основы реляционных баз данных SQL
    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
        )
    );

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

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

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