วิธีการติดตั้งตัวดำเนินการเงื่อนไข ternary ใน MySQL


90

ฉันต้องการใช้ตัวดำเนินการเงื่อนไขที่สามใน MySQL ฉันมีตารางที่มีรหัสเขตข้อมูลหนึ่งรายการ ค่าของมันอาจเป็นโมฆะ ฉันต้องการแสดงidในรูปแบบเงื่อนไขแบบ ternary ดังนี้:

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

เป็นไปได้ใน MySQL?


คำตอบ:


151

ลองสิ่งนี้:

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

1
น่าเสียดายที่ไม่มีชวเลข ถ้าคุณเพียงต้องการที่จะได้รับค่าแรกซึ่งเท่ากับความจริงที่คุณต้องตรวจสอบnullหรือและแม้กระทั่ง'' 0mySQL เป็นบิตของ duche ในบางครั้ง
cronoklee

53

เอกสารเป็นเพื่อนของคุณ คุณควรอ่าน!

มันบอกว่า:

IFNULL(expr1,expr2)

ถ้าexpr1ไม่ได้NULL, IFNULL()ผลตอบแทนexpr1; มิฉะนั้นจะกลับ expr2มา

แล้วก็มีตัวอย่างมากมาย สิ่งนี้เทียบเท่ากับการใช้เงื่อนไขNULLด้านท้ายที่มีการเปรียบเทียบและเรื่องการเปรียบเทียบเป็นตัวถูกดำเนินการที่สอง มันไม่ได้เกิดขึ้นเพื่อใช้สัญลักษณ์?และ:เพื่อให้คุณเข้าใจว่าไม่มีความเกี่ยวข้องกับอะไรเลย

ดังนั้นในกรณีของคุณ:

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

หากคุณต้องการให้ตัวถูกดำเนินการสามตัวอย่างชัดเจน (ทำไม?!) ให้เปลี่ยนเป็นIF:

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

4
+1 แต่เพื่อตอบคำถาม:CASE WHEN id IS NULL THEN 0 ELSE id END
Michael Krelin - แฮ็กเกอร์

@ MichaelKrelin-hacker: เหมือนกันไม่ใช่เหรอ? และIFNULLเป็นคนขี้โมโห
Lightness Races ใน Orbit

@ MichaelKrelin-hacker: โอ้ฉันเข้าใจแล้ว
Lightness Races ใน Orbit

แน่นอนเพียงเพื่อตอบคำถามเกี่ยวกับ ternary :)
Michael Krelin - แฮ็กเกอร์

ในกรณีของฉันฉันจำเป็นต้องใช้IFแทนIFNULLหรือCOALESCEเนื่องจากฉันกำลังย้ายข้อมูลไปยังฐานข้อมูลผู้ขายรายอื่นและไม่ต้องการนำเข้าค่าที่ไม่ใช่ค่าว่างเพียง แต่ตีความว่าเป็นสถานะทั่วไป SELECT IF(a.cancellationReason IS NOT NULL, 'C', 'A')) as appointment_statusเหมาะกับฉัน
Adam Elsodaney

22

มีสองวิธีที่คุณสามารถใช้ตรรกะเดียวกันกับตัวดำเนินการด้านท้าย:

  1. ใช้IFฟังก์ชันเช่นIF(expression, true result, false result)
  2. ใช้CASEนิพจน์เช่น

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

เมื่อคุณกำลังตรวจสอบ NULL คุณสามารถใช้IFNULLหรือCOALESCEฟังก์ชั่นเช่น

IFNULL(ID, 0)
COALESCE(ID, 0)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.