Hướng dẫn how can i compare two date fields in mysql? - làm cách nào để so sánh hai trường ngày tháng trong mysql?

0

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Bạn có thể đọc câu hỏi trong tiêu đề. Giả sử Bảng A có trường DateTime với "2015-12-01 00:00:00" và Bảng B "2014-12-01 00:00:00".

Tôi muốn hàng dữ liệu từ bảng đó có dữ liệu lớn hơn.

Một cái gì đó như "DateTime (a.datetime)> DateTime (B.Datetime)" không hoạt động.

Giúp tôi.

Đã hỏi ngày 27 tháng 1 năm 2016 lúc 20:01Jan 27, 2016 at 20:01

Hướng dẫn how can i compare two date fields in mysql? - làm cách nào để so sánh hai trường ngày tháng trong mysql?

1

Khi so sánh hai lần dữ liệu, chúng sẽ được hiểu là dấu thời gian, vì vậy chỉ cần thực hiện

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
4 sẽ hoạt động tốt.

Hướng dẫn how can i compare two date fields in mysql? - làm cách nào để so sánh hai trường ngày tháng trong mysql?

Giacomo1968

25.2k11 Huy hiệu vàng69 Huy hiệu bạc97 Huy hiệu Đồng11 gold badges69 silver badges97 bronze badges

Đã trả lời ngày 27 tháng 1 năm 2016 lúc 20:03Jan 27, 2016 at 20:03

DanieldanielDaniel

1291 Huy hiệu bạc6 Huy hiệu đồng1 silver badge6 bronze badges

Bạn sẽ có thể so sánh các trường DateTime như là,

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
4.

Đã trả lời ngày 27 tháng 1 năm 2016 lúc 20:03Jan 27, 2016 at 20:03

Danieldanielkevchoi

1291 Huy hiệu bạc6 Huy hiệu đồng2 silver badges7 bronze badges

Bạn sẽ có thể so sánh các trường DateTime như là,

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
4.

Kevchoikevchoi

  • 4342 Huy hiệu bạc7 Huy hiệu đồng

Bạn không thể luôn luôn thực hiện so sánh trực tiếp bằng cách sử dụng, = như câu trả lời cho thấy. Xem tài liệu MySQL https://dev.mysql.com/doc/refman/5.7/en/using-date.html:Mar 20, 2018 at 17:20

rjh336rjh336rjh336

Khi bạn so sánh một ngày, thời gian, DateTime hoặc dấu thời gian với chuỗi không đổi với hoặc giữa các toán tử, MySQL thường chuyển đổi chuỗi thành một số nguyên dài bên trong để so sánh nhanh hơn (và cũng để kiểm tra chuỗi thư giãn hơn một chút). Tuy nhiên, chuyển đổi này phải tuân theo các ngoại lệ sau:9 bronze badges

MySQL có khả năng so sánh hai ngày khác nhau được viết dưới dạng biểu thức

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
6. to compare two different dates written as a
SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
6 expression.

Khi bạn cần so sánh ngày giữa cột ngày và ngày tùy ý, bạn có thể sử dụng hàm

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
7 để trích xuất phần ngày từ cột của bạn và so sánh nó với một chuỗi đại diện cho ngày mong muốn của bạn.

Ví dụ: giả sử bạn có bảng MySQL có tên

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
8 với các hàng sau:

mysql> SELECT * FROM users;
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     201 | Peter      | Parker    | 2021-08-01 16:15:00 |
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
3 rows in set (0.00 sec)

Bây giờ bạn muốn truy vấn tất cả các hàng từ bảng

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
8 có giá trị
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
0 lớn hơn
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
1.

Đây là cách bạn làm điều đó:

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;

Đầu ra của truy vấn ở trên sẽ như sau:

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)

Khi so sánh cột

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
2 hoặc
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
3 với một chuỗi đại diện cho một ngày như trong truy vấn ở trên, MySQL sẽ chuyển cả giá trị cột và biểu thức thành các loại số nguyên dài để so sánh.

Đây là lý do tại sao mặc dù bạn đang so sánh một cột ngày với một chuỗi, bạn không cần phải chuyển đổi các giá trị cột ngày của mình thành một chuỗi theo cách thủ công.

Để kiểm tra kết quả truy vấn của bạn, bạn nên bao gồm câu lệnh

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
4 ở trên.

Bạn có thể ngay lập tức biết nếu truy vấn đáp ứng yêu cầu của bạn bằng cách nhìn vào hàng đầu tiên. Như trong ví dụ trên, giá trị sớm nhất của cột ____2020 nên là

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
6. if the query satisfies your requirement by looking at the first row. As in the example above, the
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
0 column’s earliest value should be
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
6.

Bạn cũng có thể sử dụng toán tử

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
7 để chọn tất cả các hàng có cột ngày giữa hai biểu thức ngày được chỉ định:

SELECT * FROM users
WHERE DATE(last_update)
  BETWEEN "2021-08-01" AND "2021-08-02"
ORDER BY last_update ASC;

Truy vấn ở trên sẽ tạo ra kết quả sau:

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     201 | Peter      | Parker    | 2021-08-01 16:15:00 |
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)

MySQL chỉ cho phép một định dạng ngày là

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
8, vì vậy bạn cần định dạng bất kỳ biểu thức ngày chuỗi nào bạn có thể có như vậy. one date format which is
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
8, so you need to format any string date expression you may have as such.

Tại sao sử dụng hàm ngày () để so sánh

Hàm MySQL

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
7 trích xuất phần ngày từ cột
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
2 hoặc
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
3 của bạn thành một
SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
6 như hình dưới đây:

mysql> SELECT DATE('2005-08-28 01:02:03');
-> '2005-08-28'

Hàm được sử dụng để MySQL sẽ chỉ xem xét phần ngày của các giá trị cột của bạn để so sánh.

Không sử dụng hàm

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
7, thì MySQL cũng sẽ so sánh phần thời gian của cột với biểu thức chuỗi của bạn. Điều này sẽ làm cho bất kỳ loại so sánh nào bao gồm biểu thức chuỗi được chỉ định vào tập kết quả.

Quay trở lại bảng ví dụ ở trên, truy vấn sau:

SELECT * FROM users
WHERE last_update > "2021-08-01"
ORDER BY last_update ASC;

Sẽ tạo ra kết quả sau:

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     201 | Peter      | Parker    | 2021-08-01 16:15:00 |
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
3 rows in set (0.01 sec)

Như bạn có thể thấy từ đầu ra, mệnh đề so sánh

SELECT * FROM users
WHERE DATE(last_update)
  BETWEEN "2021-08-01" AND "2021-08-02"
ORDER BY last_update ASC;
4 trở thành
SELECT * FROM users
WHERE DATE(last_update)
  BETWEEN "2021-08-01" AND "2021-08-02"
ORDER BY last_update ASC;
5 và do đó, MySQL tiến hành tạo ra kết quả được đặt tương ứng.

Nếu bạn có ý định so sánh phần thời gian cho truy vấn của mình, thì bạn cũng cần bao gồm phần thời gian trong biểu thức chuỗi của bạn.

Truy vấn sau từ cùng một bảng:

SELECT * FROM users
WHERE last_update > "2021-08-01 20:00:00"
ORDER BY last_update ASC;

Sẽ tạo ra kết quả sau:

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)

So sánh ngày giữa hai cột ngày

Nếu bạn đã có hai cột ngày, thì bạn có thể ngay lập tức so sánh chúng với

SELECT * FROM users
WHERE DATE(last_update)
  BETWEEN "2021-08-01" AND "2021-08-02"
ORDER BY last_update ASC;
6,
SELECT * FROM users
WHERE DATE(last_update)
  BETWEEN "2021-08-01" AND "2021-08-02"
ORDER BY last_update ASC;
7,
SELECT * FROM users
WHERE DATE(last_update)
  BETWEEN "2021-08-01" AND "2021-08-02"
ORDER BY last_update ASC;
8,
SELECT * FROM users
WHERE DATE(last_update)
  BETWEEN "2021-08-01" AND "2021-08-02"
ORDER BY last_update ASC;
9,
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     201 | Peter      | Parker    | 2021-08-01 16:15:00 |
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
0 hoặc
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
7.
, then you can immediately compare them with the
SELECT * FROM users
WHERE DATE(last_update)
  BETWEEN "2021-08-01" AND "2021-08-02"
ORDER BY last_update ASC;
6,
SELECT * FROM users
WHERE DATE(last_update)
  BETWEEN "2021-08-01" AND "2021-08-02"
ORDER BY last_update ASC;
7,
SELECT * FROM users
WHERE DATE(last_update)
  BETWEEN "2021-08-01" AND "2021-08-02"
ORDER BY last_update ASC;
8,
SELECT * FROM users
WHERE DATE(last_update)
  BETWEEN "2021-08-01" AND "2021-08-02"
ORDER BY last_update ASC;
9,
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     201 | Peter      | Parker    | 2021-08-01 16:15:00 |
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
0, or
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
7 operators.

Giả sử bạn có cột

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
0 và
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     201 | Peter      | Parker    | 2021-08-01 16:15:00 |
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
3 trong bảng của bạn như được hiển thị bên dưới:

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
0

Để lấy tất cả các hàng có cột

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     201 | Peter      | Parker    | 2021-08-01 16:15:00 |
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
3 muộn hơn cột
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
0, bạn có thể sử dụng truy vấn sau:

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
1

Kết quả sẽ như sau:

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
2

Và đó là cách mà bạn có thể thực hiện so sánh ngày trong MySQL.

Đừng quên rằng bạn cần phải có biểu thức chuỗi ngày được định dạng là

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
8 hoặc
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     201 | Peter      | Parker    | 2021-08-01 16:15:00 |
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
7 nếu bạn cũng muốn so sánh phần thời gian.
you need to have a date string expression formatted as
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
|     204 | Loki       | Laufeyson | 2021-08-03 10:43:24 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
8 or
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     201 | Peter      | Parker    | 2021-08-01 16:15:00 |
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
7 if you want to compare the time portion as well.

Ngoài ra, ở đây, các câu lệnh

+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     201 | Peter      | Parker    | 2021-08-01 16:15:00 |
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
8 và
+---------+------------+-----------+---------------------+
| user_id | first_name | last_name | last_update         |
+---------+------------+-----------+---------------------+
|     201 | Peter      | Parker    | 2021-08-01 16:15:00 |
|     202 | Thor       | Odinson   | 2021-08-02 12:15:00 |
+---------+------------+-----------+---------------------+
2 rows in set (0.00 sec)
9 nếu bạn cần bảng ví dụ của tôi cho các bài tập:

SELECT * FROM users
WHERE DATE(last_update) > "2021-08-01"
ORDER BY last_update ASC;
3

Vui lòng sử dụng tất cả các tài nguyên bạn thấy ở đây cho dự án của bạn 😉

Làm thế nào tôi có thể so sánh hai ngày trong truy vấn MySQL?

Điều này có thể dễ dàng thực hiện bằng cách sử dụng các toán tử bằng (=), nhỏ hơn ().Trong SQL, giá trị ngày có kiểu dữ liệu ngày chấp nhận ngày ở định dạng 'yyyy-mm-dd'.Để so sánh hai ngày, chúng tôi sẽ khai báo hai ngày và so sánh chúng bằng cách sử dụng câu lệnh IF-Else.declare two dates and compare them using the IF-ELSE statement.

Làm cách nào để so sánh hai giá trị DateTime?

DateTime.Phương thức so sánh () trong C# được sử dụng để so sánh hai trường hợp DateTime ...
<0 − If date1 is earlier than date2..
0 - nếu ngày1 giống như ngày 2 ..
> 0 - nếu ngày1 muộn hơn ngày 2 ..

Làm thế nào tôi có thể tính toán chênh lệch ngày giữa hai ngày trong MySQL?

Hàm datediff () trả về số ngày giữa hai giá trị ngày.DATEDIFF() function returns the number of days between two date values.

Chúng ta có thể so sánh ngày với DateTime trong SQL không?

Cách đúng để so sánh các giá trị chỉ ngày với cột DateTime là bằng cách sử dụng điều kiện.Điều này sẽ đảm bảo rằng bạn sẽ nhận được các hàng nơi ngày bắt đầu từ nửa đêm và kết thúc trước nửa đêm, ví dụ:Ngày bắt đầu với '00: 00: 00.000 'và kết thúc ở "59: 59: 59.999".using <= and > condition. This will ensure that you will get rows where date starts from midnight and ends before midnight e.g. dates starting with '00:00:00.000' and ends at "59:59:59.999".