Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tìm bản ghi có ngày hiện tại nằm giữa JoiningDate và RelievingDate trong MySQL

Giới thiệu

Sử dụng toán tử BETWEEN kết hợp với hàm NOW() để lọc các bản ghi mà ngày giờ hiện tại nằm trong khoảng từ ngày gia nhập đến ngày nghỉ việc.

Ví dụ thực hành

1. Tạo bảng DemoTable771

mysql> CREATE TABLE DemoTable771 (
    JoiningDate DATETIME,
    RelievingDate DATETIME
);

2. Chèn dữ liệu

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');

3. Truy vấn nhân viên đang làm việc (giả sử NOW() = 2019-08-03)

mysql> SELECT * FROM DemoTable771 
    WHERE NOW() BETWEEN JoiningDate AND RelievingDate;

4. Kết quả

+---------------------+---------------------+
| 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 |
+---------------------+---------------------+

Giải thích

  • BETWEEN bao gồm cả hai giá trị đầu và cuối (inclusive).
  • NOW() trả về ngày giờ hiện tại của server.
  • Nếu cột chỉ lưu DATE, hãy dùng CURDATE() thay vì NOW().

Mở rộng

-- Tìm nhân viên sắp nghỉ việc (trong 30 ngày tới)
SELECT * FROM DemoTable771 
WHERE RelievingDate BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY);

-- Tìm nhân viên mới gia nhập (trong 7 ngày qua)
SELECT * FROM DemoTable771 
WHERE JoiningDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND CURDATE();