#arrays #json #sqlite #case
Вопрос:
Попытка выполнить запрос к столбцу, содержащему данные JSON.
Когда я запускаю следующее:
SELECT json_array_length(threads.participants)
FROM threads
Я получаю результаты 2 и 119 (2 массива json в большинстве записей, 119 только в одной из них).
Я попробовал другой запрос, используя оператор CASE, как показано ниже:
SELECT
CASE threads.participants
WHEN json_array_length(threads.participants) = 2 THEN "2 Participants"
ELSE "More than 2 Participants"
END AS "Number of Participants"
FROM threads
Я получаю все нулевые результаты для второго запроса. Я ожидал увидеть то же количество результатов, что и в первом запросе, просто изменив их на «2 участника» и «Более 2 участников». Что я здесь упускаю?
Ответ №1:
Синтаксис, который вы используете в CASE
выражении, неверен.
Попробуйте это:
SELECT CASE json_array_length(participants)
WHEN 2 THEN '2 Participants'
ELSE 'More than 2 Participants'
END AS "Number of Participants"
FROM threads
Просто на всякий случай вы должны включить все возможные случаи (даже если они в настоящее время не существуют).:
SELECT CASE json_array_length(participants)
WHEN 0 THEN 'No Participants'
WHEN 1 THEN '1 Participant'
WHEN 2 THEN '2 Participants'
ELSE 'More than 2 Participants'
END AS "Number of Participants"
FROM threads