ฟังก์ชัน NULLIF() ใน MySQL ใช้เพื่อตรวจสอบว่า ค่าทั้งสองค่าที่ระบุมีค่าเท่ากันหรือไม่ หากทั้งสองค่าเท่ากันจะคืนค่า NULL หากไม่เท่ากัน จะคืนค่าแรก (expr1)
ฟังก์ชันนี้เหมาะสำหรับใช้ในการป้องกันการหารด้วยศูนย์, การเปรียบเทียบที่ควรส่ง NULL แทนค่าจริง หรือใช้ในการจัดการเงื่อนไขพิเศษต่าง ๆ
ประโยชน์ของฟังก์ชัน NULLIF()
- ใช้เพื่อหลีกเลี่ยงการหารด้วย 0 โดยให้คืน
NULLแทน - ใช้ในการเปรียบเทียบค่าและกำหนด
NULLแทนค่าที่ไม่ต้องการให้แสดงผล - ใช้ร่วมกับ
COALESCE()และIFNULL()เพื่อจัดการลำดับความสำคัญของค่าข้อมูล - เหมาะกับการทำ logic control ภายใน
SELECT,WHERE,CASE - ลดการใช้
IF(expr1 = expr2, NULL, expr1)ให้ง่ายขึ้นด้วยรูปแบบเดียว
รูปแบบการใช้งาน
NULLIF(expr1, expr2)
expr1คือค่าที่จะเปรียบเทียบและคืนกลับหากไม่เท่ากันexpr2คือค่าที่ใช้เปรียบเทียบกับexpr1- ถ้า
expr1 = expr2จะคืนค่าNULL - ถ้า
expr1 ≠ expr2จะคืนค่าexpr1
- ถ้า
ตัวอย่างการใช้งาน
SQL
SELECT NULLIF(10, 10) AS result; -- คืนค่า: NULL
SELECT NULLIF(10, 5) AS result; -- คืนค่า: 10สมมติว่ามีตารางชื่อ scores ซึ่งเก็บข้อมูลดังนี้
| student_id | name | score | max_score |
|---|---|---|---|
| 1 | Somchai | 80 | 100 |
| 2 | Arisa | 100 | 100 |
| 3 | John | 90 | 95 |
| 4 | Sara | 0 | 0 |
ตรวจสอบว่าคะแนนมีค่าเท่ากับคะแนนเต็มหรือไม่ ถ้าเท่ากันให้แสดง NULL
SQL
SELECT student_id, name, score, max_score,
NULLIF(score, max_score) AS score_if_not_full
FROM scores;ผลลัพธ์
| student_id | name | score | max_score | score_if_not_full |
|---|---|---|---|---|
| 1 | Somchai | 80 | 100 | 80 |
| 2 | Arisa | 100 | 100 | NULL |
| 3 | John | 90 | 95 | 90 |
| 4 | Sara | 0 | 0 | NULL |
หมายเหตุ
NULLIF()คืนค่าNULLเมื่อค่าทั้งสองเท่ากัน อย่าใช้ในกรณีที่ต้องการแสดงค่าเดิมหากเท่ากัน- หากค่าที่เปรียบเทียบอย่างใดอย่างหนึ่งเป็น
NULLจะไม่ถือว่า “เท่ากัน” ผลลัพธ์จะเป็นค่าที่ไม่ใช่NULL - ใช้
NULLIF()กับค่าที่เป็น0ต้องระวังผลลัพธ์อาจทำให้การคำนวณบางประเภท เช่น การหาร คืนค่าNULL - ใช้เพื่อป้องกันการหารด้วยศูนย์ ต้องใช้ร่วมกับ
IFNULL()หรือCOALESCE()ต่อเพื่อจัดการผลลัพธ์ที่เป็นNULL