Bagaimana menerapkan operator bersyarat terner di MySQL

Jawaban:

151

Coba ini :

select if(Id is null, 0, id) as Id;
Dewasish Mitruka
sumber
1
Sayang sekali tidak ada singkatan. Jika Anda hanya ingin mendapatkan nilai pertama yang disamakan dengan true, Anda harus memeriksa nullatau ''dan bahkan mungkin 0. mySQL terkadang sedikit tidak menyenangkan
cronoklee
53

Dokumentasinya adalah teman Anda; kamu harus membacanya!

Ia mengatakan:

IFNULL(expr1,expr2)

Jika expr1tidak NULL, IFNULL()kembalikan expr1; jika tidak, ia akan kembali expr2.

Dan banyak contoh. Ini sama dengan menggunakan kondisional terner dengan perbandingan NULLdan subjek pembanding sebagai operan kedua; bahwa tidak kebetulan menggunakan simbol-simbol itu ?dan :untuk membawa Anda ke sana tidak benar-benar relevan dengan apa pun.

Jadi, dalam kasus Anda:

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

Jika Anda sangat ingin memberikan tiga operan secara eksplisit (mengapa ?!), maka beralihlah ke IF:

SELECT IF(`id` IS NULL, 0, `id`) FROM `table`
Balapan Ringan dalam Orbit
sumber
4
+1, tetapi untuk menjawab pertanyaan:CASE WHEN id IS NULL THEN 0 ELSE id END
Michael Krelin - hacker
@ MichaelKrelin-hacker: Hal yang sama, bukan? Dan IFNULLlebih singkat.
Balapan Ringan di Orbit
@ MichaelKrelin-hacker: Oh, saya mengerti.
Balapan Ringan di Orbit
Tentu, hanya untuk menjawab pertanyaan tentang terner :)
Michael Krelin - hacker
Dalam kasus saya, saya perlu menggunakan IFalih-alih IFNULLatau COALESCEkarena saya memigrasi data ke database vendor yang berbeda dan tidak ingin mengimpor nilai bukan null, hanya menafsirkannya sebagai status umum. SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_statusbekerja untuk saya.
Adam Elsodaney
22

Ada dua cara untuk mengimplementasikan logika yang sama sebagai operator terner:

  1. Gunakan IFfungsi tersebut, misalnya.IF(expression, true result, false result)
  2. Gunakan CASEekspresi, mis.

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

Saat Anda memeriksa NULL maka Anda dapat menggunakan fungsi IFNULLatau COALESCE, misalnya.

IFNULL(ID, 0)
COALESCE(ID, 0)
a'r
sumber