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

MySQL SELECT ข้อมูลที่วันที่มากกว่าหรือเท่ากับ 1 วันจากวันนี้ (INTERVAL)

ใช้ INTERVAL ในเงื่อนไข WHERE เพื่อเปรียบเทียบวันที่/เวลากับวันปัจจุบัน (NOW() หรือ CURDATE())

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

1. วันที่ปัจจุบัน

mysql> SELECT CURDATE();
+------------+
| curdate()  |
+------------+
| 2019-11-29 |
+------------+

2. สร้างตาราง

mysql> CREATE TABLE DemoTable1806 (
    DueDate DATETIME
);
Query OK, 0 rows affected (0.00 sec)

3. เพิ่มข้อมูล

mysql> INSERT INTO DemoTable1806 VALUES('2019-11-28');
mysql> INSERT INTO DemoTable1806 VALUES('2019-11-29');
mysql> INSERT INTO DemoTable1806 VALUES('2019-11-30');
mysql> INSERT INTO DemoTable1806 VALUES('2019-11-25');

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

mysql> SELECT * FROM DemoTable1806;
+---------------------+
| DueDate             |
+---------------------+
| 2019-11-28 00:00:00 |
| 2019-11-29 00:00:00 |
| 2019-11-30 00:00:00 |
| 2019-11-25 00:00:00 |
+---------------------+

5. Query: DueDate >= (วันนี้ - 1 วัน)

mysql> SELECT * FROM DemoTable1806 
    WHERE DueDate >= NOW() - INTERVAL 1 DAY;

6. ผลลัพธ์ (สมมติ NOW() = 2019-11-29 ...)

+---------------------+
| DueDate             |
+---------------------+
| 2019-11-29 00:00:00 |
| 2019-11-30 00:00:00 |
+---------------------+

คำอธิบาย

  • NOW() : วันที่และเวลาปัจจุบัน (DATETIME)
  • CURDATE() : เฉพาะวันที่ปัจจุบัน (DATE)
  • INTERVAL 1 DAY : ช่วงเวลา 1 วัน
  • NOW() - INTERVAL 1 DAY : เวลา 24 ชั่วโมงก่อนหน้า
  • DueDate >= ... : รวมถึงเวลาที่เท่ากัน (Greater than or Equal)

รูปแบบ INTERVAL อื่นๆ

หน่วยตัวอย่าง
SECONDINTERVAL 30 SECOND
MINUTEINTERVAL 15 MINUTE
HOURINTERVAL 2 HOUR
DAYINTERVAL 1 DAY
WEEKINTERVAL 1 WEEK
MONTHINTERVAL 1 MONTH
YEARINTERVAL 1 YEAR
COMBINEDINTERVAL '1 12:30:00' DAY_SECOND

ตัวอย่างเพิ่มเติม

-- วันที่มากกว่าวันนี้ 7 วัน (อีก 1 สัปดาห์)
WHERE DueDate >= CURDATE() + INTERVAL 7 DAY

-- วันที่น้อยกว่าวันนี้ 30 วัน (30 วันที่แล้ว)
WHERE DueDate <= CURDATE() - INTERVAL 30 DAY

-- ช่วง 1 เดือนย้อนหลัง
WHERE DueDate BETWEEN CURDATE() - INTERVAL 1 MONTH AND CURDATE()

สรุป

ใช้ WHERE date_col >= NOW() - INTERVAL 1 DAY เพื่อดึงข้อมูล 1 วันย้อนหลังถึงปัจจุบัน ใช้ NOW() สำหรับ DATETIME, CURDATE() สำหรับ DATE INTERVAL รองรับหน่วยเวลาทุกชนิด