Come implementare l'operatore condizionale ternario in MySQL


90

Voglio implementare l'operatore condizionale ternario in MySQL. Ho una tabella in cui esiste un ID di campo. Il suo valore può essere nullo. Voglio visualizzare idin formato condizionale ternario come questo:

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

È possibile in MySQL?


Risposte:


151

Prova questo :

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

1
È un peccato che non ci siano scorciatoie. Se vuoi solo ottenere il primo valore che corrisponde a true, devi controllare nullo ''e forse anche 0. mySQL a volte è un po 'strano
cronoklee

53

La documentazione è tua amica; dovresti leggerlo!

Dice:

IFNULL(expr1,expr2)

Se expr1non lo è NULL, IFNULL()restituisce expr1; altrimenti ritorna expr2.

E poi tanti esempi. Ciò equivale a utilizzare un condizionale ternario con un confronto NULLe l'oggetto di confronto come secondo operando; che non ti capiti di usare i simboli ?e :di portarti lì non è realmente rilevante per nulla.

Quindi, nel tuo caso:

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

Se desideri disperatamente fornire tre operandi esplicitamente (perché ?!), passa a IF:

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

4
+1, ma per rispondere alla domanda:CASE WHEN id IS NULL THEN 0 ELSE id END
Michael Krelin - hacker

@ MichaelKrelin-hacker: Stessa cosa, no? Ed IFNULLè più conciso.
Gare di leggerezza in orbita

@ MichaelKrelin-hacker: Oh, ho capito.
Gare di leggerezza in orbita il

Certo, solo per rispondere alla domanda sul ternario :)
Michael Krelin - hacker

Nel mio caso, devo usare al IFposto di IFNULLo COALESCEperché sto migrando i dati in un database di un fornitore diverso e non voglio importare i valori non nulli, ma solo interpretarli come uno stato generico. SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_statusper me va bene.
Adam Elsodaney

22

Esistono due modi per implementare la stessa logica di un operatore ternario:

  1. Usa la IFfunzione, ad es.IF(expression, true result, false result)
  2. Usa l' CASEespressione, ad es.

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

Quando si verifica la presenza di NULL, è possibile utilizzare le funzioni IFNULLo COALESCE, ad es.

IFNULL(ID, 0)
COALESCE(ID, 0)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.