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

วิธีหาจำนวนวันในเดือนของ MySQL

การใช้ DAY() ร่วมกับ LAST_DAY()

วิธีที่ง่ายที่สุดคือใช้ฟังก์ชัน LAST_DAY() หาวันสุดท้ายของเดือน แล้วค่อยดึง DAY() ออกมา

รูปแบบคำสั่ง

SELECT DAY(LAST_DAY(your_date_column)) AS days_in_month 
FROM your_table_name;

ตัวอย่างการใช้งานจริง

1. สร้างตาราง

CREATE TABLE DaysInaGivenMonth (
    MonthName DATETIME
);

2. เพิ่มข้อมูล 6 เดือนย้อนหลัง

INSERT INTO DaysInaGivenMonth VALUES 
(NOW()),
(DATE_ADD(NOW(), INTERVAL -1 MONTH)),
(DATE_ADD(NOW(), INTERVAL -2 MONTH)),
(DATE_ADD(NOW(), INTERVAL -3 MONTH)),
(DATE_ADD(NOW(), INTERVAL -4 MONTH)),
(DATE_ADD(NOW(), INTERVAL -5 MONTH));

3. หาจำนวนวันในแต่ละเดือน

SELECT 
    MonthName,
    DAY(LAST_DAY(MonthName)) AS DaysInMonth
FROM DaysInaGivenMonth;

ผลลัพธ์

MonthNameDaysInMonth
2019-01-01 21:34:2631
2018-12-01 21:34:5531
2018-11-01 21:35:1430
2018-10-01 21:35:2031
2018-09-01 21:35:2330
2018-08-01 21:35:2731

วิธีอื่นๆ

1. ใช้ DATE_FORMAT (ได้ชื่อเดือนด้วย)

SELECT 
    DATE_FORMAT(MonthName, '%Y-%m') AS YearMonth,
    DAY(LAST_DAY(MonthName)) AS DaysInMonth
FROM DaysInaGivenMonth;

2. หาจำนวนวันของเดือนปัจจุบันโดยตรง

SELECT DAY(LAST_DAY(NOW())) AS days_this_month;

3. สร้างฟังก์ชันเก็บไว้ใช้ (Stored Function)

CREATE FUNCTION DaysInMonth(dt DATE) 
RETURNS TINYINT UNSIGNED
DETERMINISTIC
RETURN DAY(LAST_DAY(dt));

ตารางจำนวนวันแต่ละเดือน (อ้างอิง)

เดือนวัน (ปกติ)วัน (อธิกสุรทิน)
มกราคม3131
กุมภาพันธ์2829
มีนาคม3131
เมษายน3030
พฤษภาคม3131
มิถุนายน3030
กรกฎาคม3131
สิงหาคม3131
กันยายน3030
ตุลาคม3131
พฤศจิกายน3030
ธันวาคม3131