ฟังก์ชัน YEARWEEK() ใช้เพื่อคืนค่าปีและหมายเลขสัปดาห์ (week number) รวมกันในรูปแบบ YYYYWW จากวันที่ที่ระบุ เช่น 202425 (ปี 2024 สัปดาห์ที่ 25) เหมาะสำหรับการจัดกลุ่มข้อมูลรายสัปดาห์แบบไม่ซ้ำข้ามปี ใช้ได้ทั้งกับ DATE, DATETIME, และ TIMESTAMP
รูปแบบการใช้งาน
YEARWEEK(date [, mode])
dateคือวันที่ เช่น'2024-06-15',NOW(), หรือคอลัมน์ที่เป็นวันที่mode(optional) คือตัวเลือกการกำหนดรูปแบบของสัปดาห์ (ค่า 0–7 เหมือนWEEK(); default คือ 0)
mode ที่ใช้ได้มีดังนี้
| Mode | วันเริ่มต้นสัปดาห์ | นิยามสัปดาห์แรกของปี | อิงมาตรฐาน ISO |
|---|---|---|---|
| 0 | Sunday | สัปดาห์ที่มีวันที่ 1 มกราคม อยู่ในนั้น | ❌ |
| 1 | Monday | สัปดาห์ที่มีวันที่ 1 มกราคม อยู่ในนั้น | ❌ |
| 2 | Sunday | สัปดาห์แรกต้องมีอย่างน้อย 4 วันในปีนั้น | ❌ |
| 3 | Monday | สัปดาห์แรกต้องมีอย่างน้อย 4 วันในปีนั้น | ❌ |
| 4 | Sunday | ใช้วิธีคำนวณแบบ ISO แต่เริ่มสัปดาห์วันอาทิตย์ | ❌ |
| 5 | Monday | ใช้วิธีคำนวณแบบ ISO แต่ไม่ตรงตามมาตรฐาน 100% | ❌ |
| 6 | Sunday | เหมือน ISO 8601 แต่เริ่มวันอาทิตย์ | ❌ |
| 7 | Monday | ใช้มาตรฐาน ISO 8601 อย่างเป็นทางการ | ✅ |
ตัวอย่างการใช้งาน
สมมติว่าเรามีข้อมูลในตาราง invoices ดังนี้
| invoice_id | customer_name | invoice_date | amount |
|---|---|---|---|
| 201 | Somchai | 2024-01-02 | 1500.00 |
| 202 | Alice | 2024-01-05 | 2200.00 |
| 203 | John | 2024-03-15 | 1800.00 |
| 204 | Sara | 2024-03-18 | 2400.00 |
| 205 | Jane | 2025-01-03 | 1950.00 |
ดึงปี+สัปดาห์จากวันที่ใน invoice_date
SQL
SELECT invoice_id, invoice_date,
YEARWEEK(invoice_date) AS year_week
FROM invoices;สรุปยอดขายแยกตามปี+สัปดาห์
SQL
SELECT YEARWEEK(invoice_date) AS year_week,
SUM(amount) AS weekly_total
FROM invoices
GROUP BY year_week
ORDER BY year_week;