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?


Odpowiedzi:


149

Spróbuj tego :

select if(Id is null, 0, id) as Id;

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`

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)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.