Nesting Functions = ใส่ฟังก์ชันเป็นอาร์กิวเมนต์ของอีกฟังก์ชัน
ตัวอย่าง: UPPER + CONCAT
mysql> SELECT UPPER(CONCAT('www.', 'tutorialspoint', '.com')) AS Tutorials;
+------------------------+
| Tutorials |
+------------------------+
| WWW.TUTORIALSPOINT.COM |
+------------------------+
ตัวอย่าง: LOWER + CONCAT
mysql> SELECT LOWER(CONCAT('WWW.', 'TUTORIALSPOINT', '.COM')) AS Tutorials;
+------------------------+
| Tutorials |
+------------------------+
| www.tutorialspoint.com |
+------------------------+
หลักการ
- ฟังก์ชันในสุด (Inner) รันก่อน
- ผลลัพธ์ส่งให้ฟังก์ชันนอก (Outer)
- สามารถซ้อนได้หลายชั้น
ตัวอย่างซ้อน 3 ชั้น
SELECT TRIM(UPPER(CONCAT(' ', 'hello', ' ')));
-- CONCAT → ' hello '
-- UPPER → ' HELLO '
-- TRIM → 'HELLO'
ฟังก์ชันที่รวมกันบ่อย
- String: CONCAT, SUBSTRING, REPLACE, TRIM, UPPER/LOWER
- Date: DATE_FORMAT, DATE_ADD, NOW
- Math: ROUND, ABS, POWER
- Control: IF, COALESCE, NULLIF
ข้อควรระวัง
- Performance: Nested function เรียกซ้ำหลายครั้งใน WHERE clause
- Readability: ซ้อนมากเกินไปอ่านยาก → ใช้ CTE/Subquery แทน
- NULL handling: ฟังก์ชันส่วนใหญ่คืน NULL ถ้าอินพุตมี NULL