Как реализовать тернарный условный оператор в MySQL

89

Я хочу реализовать тернарный условный оператор в MySQL. У меня есть таблица, в которой существует один идентификатор поля. Его значение может быть нулевым. Я хочу отображать idв тернарном условном формате следующим образом:

select id = id == null ? 0 : id;

Возможно ли это в MySQL?

user1086355
источник
возможный дубликат Как написать условное выражение в операторе выбора MySQL?
Гонки за легкостью на орбите,

Ответы:

149

Попробуй это :

select if(Id is null, 0, id) as Id;
Девасиш Митрука
источник
1
Жаль, что нет стенографии. Если вы просто хотите получить первое значение, равное истине, вам нужно проверить nullили, ''а может быть, даже 0.
mySQL
53

Документация - ваш друг; Вы должны это прочитать!

Он говорит:

IFNULL(expr1,expr2)

Если expr1нет NULL, IFNULL()возвращается expr1; в противном случае он возвращается expr2.

А потом много примеров. Это эквивалентно использованию тернарного условного оператора со сравнением NULLи объектом сравнения в качестве второго операнда; что здесь не используются символы, ?и :чтобы доставить вас туда, на самом деле не имеет отношения ни к чему.

Итак, в вашем случае:

SELECT IFNULL(`id`, 0) FROM `table`

Если вы отчаялись явно указать три операнда (зачем ?!), переключитесь на IF:

SELECT IF(`id` IS NULL, 0, `id`) FROM `table`
Гонки легкости на орбите
источник
4
+1, но чтобы ответить на вопрос:CASE WHEN id IS NULL THEN 0 ELSE id END
Михаил Крелин - хакер
@ MichaelKrelin-hacker: То же самое, не так ли? И IFNULLкороче.
Гонки легкости на орбите
@ MichaelKrelin-hacker: О, я понял.
Гонки за легкостью на орбите,
Конечно, просто чтобы ответить на вопрос о троичности :)
Михаил Крелин - хакер
В моем случае мне нужно использовать IFвместо IFNULLили COALESCEпотому что я переношу данные в базу данных другого поставщика и не хочу импортировать ненулевые значения, а интерпретирую их только как общий статус. SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_statusработает для меня.
Адам Элсодейни
22

Есть два способа реализовать ту же логику, что и тернарный оператор:

  1. Используйте IFфункцию, например.IF(expression, true result, false result)
  2. Используйте CASEвыражение, например.

    CASE WHEN expression THEN <true result> ELSE <false_result> END
    

Когда вы проверяете NULL, вы можете использовать функции IFNULLили COALESCE, например.

IFNULL(ID, 0)
COALESCE(ID, 0)
a'r
источник