Comment implémenter un opérateur conditionnel ternaire dans MySQL


89

Je veux implémenter un opérateur conditionnel ternaire dans MySQL. J'ai une table dans laquelle un identifiant de champ existe. Sa valeur peut être nulle. Je veux afficher iddans un format conditionnel ternaire comme ceci:

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

Est-ce possible dans MySQL?


Réponses:


149

Essaye ça :

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

1
C'est dommage qu'il n'y ait pas de raccourci. Si vous voulez juste obtenir la première valeur qui équivaut à vrai, vous devez vérifier nullou ''et peut-être même 0. mySQL est parfois un peu duché
cronoklee

53

La documentation est votre ami; vous devriez le lire!

Ça dit:

IFNULL(expr1,expr2)

Si ce expr1n'est pas le cas NULL, IFNULL()retourne expr1; sinon, il revient expr2.

Et puis plein d'exemples. Cela équivaut à utiliser un conditionnel ternaire avec une comparaison à NULLet le sujet de comparaison comme deuxième opérande; qu'il n'arrive pas à utiliser les symboles ?et :à vous y amener n'est vraiment pertinent pour rien.

Donc, dans votre cas:

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

Si vous êtes désespéré de fournir trois opérandes explicitement (pourquoi?!), Passez à IF:

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

4
+1, mais pour répondre à la question:CASE WHEN id IS NULL THEN 0 ELSE id END
Michael Krelin - hacker

@ MichaelKrelin-hacker: Même chose, non? Et IFNULLc'est terser.
Courses de légèreté en orbite

@ MichaelKrelin-hacker: Oh, je comprends.
Courses de légèreté en orbite

Bien sûr, juste pour répondre à la question sur ternaire :)
Michael Krelin - hacker

Dans mon cas, je dois utiliser à la IFplace IFNULLou COALESCEparce que je migre des données vers une base de données de fournisseur différente et que je ne veux pas importer les valeurs non nulles, l'interpréter uniquement comme un statut générique. SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_statustravaille pour moi.
Adam Elsodaney

22

Il existe deux façons d'implémenter la même logique qu'un opérateur ternaire:

  1. Utilisez la IFfonction, par exemple.IF(expression, true result, false result)
  2. Utilisez l' CASEexpression, par exemple.

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

Lorsque vous recherchez NULL, vous pouvez utiliser les fonctions IFNULLou COALESCE, par exemple.

IFNULL(ID, 0)
COALESCE(ID, 0)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.