Jak zaimplementować trójargumentowy operator warunkowy w MySQL

89

Chcę zaimplementować trójskładnikowy operator warunkowy w MySQL. Mam tabelę, w której istnieje jeden identyfikator pola. Jego wartość może być zerowa. Chcę wyświetlić idw trójskładnikowym formacie warunkowym, takim jak ten:

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

Czy jest to możliwe w MySQL?

user1086355
źródło
możliwy duplikat Jak napisać warunek w instrukcji MySQL select?
Wyścigi lekkości na orbicie,

Odpowiedzi:

149

Spróbuj tego :

select if(Id is null, 0, id) as Id;
Dewasish Mitruka
źródło
1
Szkoda, że ​​nie ma skrótu. Jeśli chcesz po prostu dostać pierwszą wartość, która równa się prawdą, trzeba sprawdzić, nullczy '', a może nawet 0. mySQL jest czasami
trochę duche
53

Dokumentacja jest twoim przyjacielem; powinieneś to przeczytać!

To mówi:

IFNULL(expr1,expr2)

Jeśli expr1nie NULL, IFNULL()zwraca expr1; w przeciwnym razie wraca expr2.

A potem mnóstwo przykładów. Jest to równoważne użyciu warunku trójskładnikowego z porównaniem NULLi podmiotem porównania jako drugim operandem; że nie zdarza się, że używa się symboli ?i :aby cię tam dostać, nie ma znaczenia.

A więc w twoim przypadku:

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

Jeśli jesteś zdesperowany, aby jawnie podać trzy operandy (dlaczego ?!), przełącz na IF:

SELECT IF(`id` IS NULL, 0, `id`) FROM `table`
Lekkość wyścigów na orbicie
źródło
4
+1, ale żeby odpowiedzieć na pytanie:CASE WHEN id IS NULL THEN 0 ELSE id END
Michael Krelin - haker
@ MichaelKrelin-hacker: To samo, nie? I IFNULLjest bardziej zwięzły.
Wyścigi lekkości na orbicie,
@ MichaelKrelin-hacker: Och, rozumiem.
Wyścigi lekkości na orbicie,
Jasne, wystarczy odpowiedzieć na pytanie o
trójkę
W moim przypadku muszę użyć IFzamiast IFNULLlub, COALESCEponieważ migruję dane do innej bazy danych dostawcy i nie chcę importować wartości innych niż null, tylko interpretuję je jako stan ogólny. SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_statuspracuje dla mnie.
Adam Elsodaney
22

Istnieją dwa sposoby zaimplementowania tej samej logiki co operator trójskładnikowy:

  1. Skorzystaj z IFfunkcji, np.IF(expression, true result, false result)
  2. Użyj CASEwyrażenia, np.

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

Podczas sprawdzania wartości NULL możesz użyć funkcji IFNULLlub COALESCE, np.

IFNULL(ID, 0)
COALESCE(ID, 0)
a'r
źródło