COALESCE ISNULL และ IFNULL
COALESCE(val1, val2, ...., val_n)
คืนค่าข้อมูลรายการแรกที่ไม่ใช่ NULL
IFNULL(expression, alt_value)
ฟังก์ชั่น คืนค่า alt_value หาก expression เป็น NULL หาก expression ไม่ใช่ NULL คืนค่า expression
ISNULL(expression)
ฟังก์ชั่นทดสอบ expression ว่าเป็น NULL หรือไม่ คืนค่า 1 ถ้าเป็น NULL ถ้าไม่ใช่คืนค่า 0
ความแตกต่างระหว่าง IFNULL และ COALESCE
- IFNULL จะคืนค่าผลลัพท์จากพารามิเตอร์ที่สอง หากพารามิเตอร์แรกเป็น NULL ในขณะที่ COALESCE จะคืนค่าข้อมูลจากพารามิเตอร์ถัดไป ที่ไม่ใช่ NULL กลับมา
- IFNULL จะรับพารามิเตอร์ ได้แค่เพียง 2 ตัว ในขณะที่ COALESCE สามารถรับค่า พารามิเตอร์ ได้มากกว่า โดยจะคืนค่าพารามิเตอร์ตัวแรกสุดที่ไม่เป็น NULL
- ทั้ง IFNULL และ COALESCE จะคืนค่าชนิดข้อมูลอิงตามพารามิเตอร์ตัวแรกโดยคำนึงถึง ลำดับความสำคัญของชนิดของข้อมูล SQL
- สำหรับ SQL Server ใช้ ISNULL แทน IFNULL
ตัวอย่างการใช้งาน
SELECT COALESCE(`hourly_wage` * 40 * 52, `salary`, `commission` * `num_sales`) AS `money` FROM `table_demo`
ผลลัพท์การคำนวณจำนวนเงินจากตารางด้านบน
SELECT 1+IFNULL(MAX(`id`), 0) AS `id` FROM `table_demo`
ผลลัพท์เป็นการหาค่า id ถัดไปจากตารางด้านบน (id นี้เป็นคนละตัวกันกับค่าที่ได้จาก auto_increment นะครับ)
SELECT 1+COALESCE(MAX(`id`), 0) AS `id` FROM `table_demo`
ทั้ง IFNULL และ COALESCE จะพยายามคืนค่าข้อมูลตามชนิดของข้อมูลในพารามิเตอร์แรก ตามกฏ ลำดับความสำคัญของชนิดของข้อมูล SQL
ตัวอย่างด้านล่าง price เป็นชนิด DECIMAL(10,2)
SELECT COALESCE(SUM(price), 0) FROM app_stock WHERE price<0
ผลลัพท์ 0.00 คืนค่าเป็น Decimal
SELECT COALESCE(SUM(price), '0') FROM app_stock WHERE price<0
ผลลัพท์ 0 คืนค่าเป็น String