Bagaimana menerapkan operator bersyarat terner di MySQL


Jawaban:


151

Coba ini :

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

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`

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.