Як реалізувати потрійний умовний оператор у MySQL


89

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

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

Чи можливо це в 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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.