So implementieren Sie einen ternären bedingten Operator in MySQL


88

Ich möchte einen ternären bedingten Operator in MySQL implementieren. Ich habe eine Tabelle, in der eine Feld-ID vorhanden ist. Sein Wert kann null sein. Ich möchte idin einem ternären bedingten Format wie folgt anzeigen :

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

Ist es in MySQL möglich?


Antworten:


146

Versuche dies :

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

1
Es ist eine Schande, dass es keine Abkürzung gibt. Wenn Sie nur den ersten Wert erhalten möchten, der true entspricht, müssen Sie nach nulloder ''und vielleicht sogar suchen 0. mySQL ist manchmal ein bisschen wie eine Duche
Cronoklee

50

Die Dokumentation ist dein Freund; du solltest es lesen!

Es sagt:

IFNULL(expr1,expr2)

Wenn expr1nicht NULL, wird IFNULL()zurückgegeben expr1. Andernfalls wird es zurückgegeben expr2.

Und dann viele Beispiele. Dies entspricht der Verwendung einer ternären Bedingung mit einem Vergleich mit NULLund dem Vergleichssubjekt als zweitem Operanden. Dass es nicht passiert, die Symbole zu verwenden ?und :Sie dorthin zu bringen, ist für nichts wirklich relevant.

Also in Ihrem Fall:

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

Wenn Sie unbedingt drei Operanden explizit angeben möchten (warum?!), Wechseln Sie zu IF:

SELECT IF(`id` IS NULL, 0, `id`) FROM `table`

4
+1, aber um die Frage zu beantworten:CASE WHEN id IS NULL THEN 0 ELSE id END
Michael Krelin - Hacker

@ MichaelKrelin-Hacker: Das Gleiche, nein? Und IFNULList terser.
Leichtigkeitsrennen im Orbit

@ MichaelKrelin-Hacker: Oh, ich verstehe.
Leichtigkeitsrennen im Orbit

Klar, nur um die Frage zu ternary zu beantworten :)
Michael Krelin - Hacker

In meinem Fall muss ich IFanstelle von IFNULLoder verwenden, COALESCEweil ich Daten in eine andere Herstellerdatenbank migriere und die Nicht-Null-Werte nicht importieren möchte, sondern nur als generischen Status interpretieren möchte. SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_statusfunktioniert bei mir.
Adam Elsodaney

21

Es gibt zwei Möglichkeiten, wie Sie dieselbe Logik wie ein ternärer Operator implementieren können:

  1. Verwenden Sie die IFFunktion, z.IF(expression, true result, false result)
  2. Verwenden Sie den CASEAusdruck, z.

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

Wenn Sie nach NULL suchen, können Sie die Funktionen IFNULLoder COALESCEverwenden, z.

IFNULL(ID, 0)
COALESCE(ID, 0)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.