Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การหาสัปดาห์ที่ N ของเดือนจากคอลัมน์ DATE ใน MySQL

เพื่อหาว่าวันที่ใดอยู่ในสัปดาห์ที่เท่าไรของเดือน (สัปดาห์ที่ 1 = วันที่ 1-7, สัปดาห์ที่ 2 = วันที่ 8-14, ฯลฯ) สามารถใช้ฟังก์ชัน DAY() ร่วมกับ CASE WHEN ได้

สร้างตารางตัวอย่าง

mysql> create table DemoTable ( 
    AdmissionDate date ); 
Query OK, 0 rows affected (0.63 sec)

เพิ่มข้อมูลตัวอย่าง

mysql> insert into DemoTable values('2019-09-12'); Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('2019-09-06'); Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('2019-09-26'); Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values('2019-09-30'); Query OK, 1 row affected (0.14 sec)

แสดงข้อมูลทั้งหมด

mysql> select *from DemoTable;
+---------------+
| AdmissionDate |
+---------------+
| 2019-09-12    |
| 2019-09-06    |
| 2019-09-26    |
| 2019-09-30    |
+---------------+
4 rows in set (0.00 sec)

คิวรี่หาสัปดาห์ที่ N ของเดือน

mysql> select ( CASE WHEN DAY(AdmissionDate) BETWEEN 1 AND 7 THEN 1 
    WHEN DAY(AdmissionDate) BETWEEN 8 AND 14 THEN 2 
    WHEN DAY(AdmissionDate) BETWEEN 15 AND 21 THEN 3 
    WHEN DAY(AdmissionDate) BETWEEN 22 AND 28 THEN 4 
    else 5 
    end ) as NthWeekDayOfMonth from DemoTable;

ผลลัพธ์:

+-------------------+
| NthWeekDayOfMonth |
+-------------------+
|                 2 |
|                 1 |
|                 4 |
|                 5 |
+-------------------+
4 rows in set (0.01 sec)

คำอธิบาย

  • DAY(date) คืนค่าวันของเดือน (1-31)
  • BETWEEN ใช้ตรวจสอบช่วงค่า
  • วันที่ 29-31 จะอยู่ในสัปดาห์ที่ 5 (else)
  • วิธีนี้คำนวณจากวันที่ของเดือน ไม่ใช่สัปดาห์ของปี (ISO week)

วิธีทางเลือก: ใช้ WEEK() และ WEEKOFYEAR()

หากต้องการสัปดาห์ของปีตามมาตรฐาน ISO ให้ใช้ WEEK(date, 3) หรือ WEEKOFYEAR(date) แทน