Форматирование true / false в sql

Я передаю dict, который я получаю из mysql, непосредственно в json. К сожалению, json не работает при попытке проанализировать логическое значение со следующей ошибкой:

'Current token (VALUE_NUMBER_INT) not of boolean type

Является ли следующий предпочтительный способ преобразования TINYINT(1) в логическое значение javascript?

if (tm.is_live, 'true', 'false') live_for_preorder,

Какие будут возможные значения в поле tm.is_live?

Madhur Bhaiya 15.11.2018 05:46

Это не похоже на ошибку MySQL. Но это выглядит как ошибка Elastic Search: github.com/elastic/elasticsearch/issues/10056

Madhur Bhaiya 15.11.2018 05:47

Как ты получил диктант? Какая версия MySQL? Какая структура таблицы / запрос?

danblack 15.11.2018 05:50

@MadhurBhaiya поле tm.is_live - это TINYINT (1), а значения будут либо 0, либо 1. Я думаю, что json (ES) исключает «истину» / «ложь».

user10332687 15.11.2018 05:52

что такое live_for_preorder тип данных и размер?

comphonia 15.11.2018 06:18

@comphonia tm.is_live - это TINYINT(1), а live_for_preorder - это просто псевдоним.

user10332687 15.11.2018 06:19

@DavidL ваш существующий запрос должен работать. Вы также можете преобразовать If() в совместимый с ANSI SQL CASE..WHEN (если вы измените БД позже, поскольку IF() специфичен только для MySQL). В случае CASE..WHEN это выглядело бы так: CASE tm.is_live WHEN 0 THEN 'false' ELSE 'true' END AS live_for_preorder

Madhur Bhaiya 15.11.2018 06:21
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
7
155
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я, кажется, припоминаю, что MySQL - одна из тех редких баз данных, которые позволяют использовать IF в обычных операторах SELECT, где большинство dbms настаивают на case, IF зарезервировано для потока управления.

Таким образом, похоже, что MySQL сообщает вам, что вы не предоставляете IF с логическим значением, когда он этого требует. Преобразуйте ваш оператор в сравнение, которое возвращает логическое значение:

if (tm.is_live=1, 'true', 'false') live_for_preorder,

(Если вы используете 1 для истины и 0 для false)

Чтобы сделать ваш набор навыков db более переносимым, было бы хорошо выработать привычку использовать CASE, а не IF в выбранных запросах:

CASE tm.is_live WHEN 1 THEN 'true' ELSE 'false' END live_for_preorder,

CASE WHEN tm.is_live = 1 THEN 'true' ELSE 'false' END live_for_preorder,

В кейсе может быть любое количество WHEN, но вы не можете смешивать формы, это либо CASE variable WHEN comparevalue THEN outputvalue [when when when else] END, либо CASE WHEN test THEN output [when when when else] END.

Сервер Sql позволит вам использовать iif (условие, результат, если истина, результат, если ложь) в операторе выбора, но он используется очень редко (по крайней мере, из того, что я читал / видел). docs.microsoft.com/en-us/sql/t-sql/functions/…

Dwight Reynoldson 15.11.2018 08:33

Но ведь это реализовано как функция, не так ли? И вы не можете использовать IIF для потока управления? Все основные СУБД, о которых я знаю, настаивают на CASE для присвоения и IF для потока, за исключением того, что MySQL допускает оба варианта (грязный!)

Caius Jard 15.11.2018 08:38
Ответ принят как подходящий

Если вы хотите преобразовать в логическое значение MySQL, просто выполните:

select (tm.is_live <> 0) as live_for_preorder,

Если это будет принято Javascript, это будет самым простым решением.

Другие вопросы по теме