2011-12-14 13 views
48

Chcę zaimplementować trójskładnikowego operatora warunkowego w MySQL. Mam tabelę, w której istnieje jeden identyfikator pola. Jego wartość może być zerowa. Chcę, aby wyświetlić id w formacie potrójnego warunkowego tak:Jak zaimplementować trójskładnikowego operatora warunkowego w MySQL

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

Czy jest możliwe w MySQL?

+0

możliwe duplikat [Jak napisać warunkowe w MySQL SELECT?] (Http://stackoverflow.com/questions/1647961/how-do-you-write-a-conditional-in- a-mysql-select-statement) –

Odpowiedz

94

Spróbuj tego:

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

The documentation jest twoim przyjacielem; powinieneś to przeczytać!

Mówi:

IFNULL(expr1,expr2) 

Jeśli expr1 to nie NULL, IFNULL() powraca expr1; w przeciwnym razie zwraca expr2.

A następnie wiele przykładów. Jest to równoważne użyciu potrójnego warunkowego z porównaniem z NULL i podmiotem porównującym jako drugim operandem; to, że nie używa się symboli ? i :, aby się tam dostać, nie ma żadnego związku z niczym.

Więc w twoim przypadku:

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

Jeśli jesteś zdesperowany, aby zapewnić trzy argumenty wyraźnie (dlaczego ?!), a następnie przejść do IF:

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

+1, ale aby odpowiedzieć na pytanie: 'CASE WHEN id IS NULL THEN 0 ELSE id END' –

+0

@ MichaelKrelin-hacker: To samo, nie? A 'IFNULL' jest terser. –

+0

@ MichaelKrelin-hacker: Oh, rozumiem. –

14

Istnieją dwa sposoby wdrożenia tej samej logiki, co operator trójskładnikowy:

  1. Użyj funkcji IF, np. IF(expression, true result, false result)
  2. Użyj wyrażenia CASE, np.

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

Podczas sprawdzania NULL wtedy można użyć IFNULL lub COALESCE funkcje, np.

IFNULL(ID, 0) 
COALESCE(ID, 0) 
Powiązane problemy