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

MySQL: ค้นหาแถวที่วันที่ปัจจุบันอยู่ระหว่าง JoiningDate และ RelievingDate

การใช้ BETWEEN กับ NOW()

คำสั่ง BETWEEN ร่วมกับฟังก์ชัน NOW() ช่วยหาแถวที่วันที่ปัจจุบันอยู่ในช่วงระหว่างสองวันที่

ตัวอย่าง: ตารางพนักงาน

mysql> create table DemoTable771 (
    Joiningdate datetime,
    Relievingdate datetime );
Query OK, 0 rows affected (1.15 sec)
mysql> insert into DemoTable771 values('2016-01-21','2016-09-23');
mysql> insert into DemoTable771 values('2019-01-21','2019-09-23');
mysql> insert into DemoTable771 values('2017-04-01','2018-12-31');
mysql> insert into DemoTable771 values('2019-04-01','2019-12-31');

ค้นหาพนักงานที่ยังทำงานอยู่ (วันที่ปัจจุบันอยู่ในช่วง)

mysql> select * from DemoTable771 where NOW() between Joiningdate and Relievingdate;

ผลลัพธ์ (สมมติวันนี้คือ 2019-08-03):

+---------------------+---------------------+
| Joiningdate         | Relievingdate       |
+---------------------+---------------------+
| 2019-01-21 00:00:00 | 2019-09-23 00:00:00 |
| 2019-04-01 00:00:00 | 2019-12-31 00:00:00 |
+---------------------+---------------------+

รายละเอียดการทำงาน

  • NOW() คืนค่าวันที่และเวลาปัจจุบันของเซิร์ฟเวอร์
  • BETWEEN รวมค่าขอบเขต (Inclusive) คือ Joiningdate <= NOW() <= Relievingdate
  • เหมาะสำหรับระบบ HR, สมาชิก, การจองที่พัก ฯลฯ

ขยายใช้งาน: ใช้ CURDATE() แทน NOW()

หากไม่ต้องการพิจารณาเวลา ใช้ CURDATE() แทน:

select * from DemoTable771 where CURDATE() between DATE(Joiningdate) and DATE(Relievingdate);

สรุป

WHERE NOW() BETWEEN start_date AND end_date เป็นรูปแบบมาตรฐานสำหรับตรวจสอบสถานะ "Active" ตามช่วงเวลา