SQLite json_array_length

#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