Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào để Đặt hàng theo ngày trong MySQL nhưng cuối cùng lại đặt các ngày trống?

Sắp xếp theo ngày và đặt các ngày trống cuối cùng với sự trợ giúp của mệnh đề ORDER BY và thuộc tính IS NULL. Cú pháp như sau:

SELECT *FROM yourTableName
ORDER BY (yourDateColumnName IS NULL), yourDateColumnName DESC;

Trong cú pháp trên, chúng tôi sẽ sắp xếp NULL đầu tiên sau ngày đó. Để hiểu cú pháp trên, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau:

mysql> create table DateColumnWithNullDemo
   -> (
   -> Id int NOT NULL AUTO_INCREMENT,
   -> LoginDateTime datetime,
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (0.84 sec)

Chèn một số bản ghi trong bảng bằng lệnh chèn. Truy vấn như sau:

mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(date_add(now(),interval -1 year));
Query OK, 1 row affected (0.15 sec)
mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(NULL);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(NULL);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(now());
Query OK, 1 row affected (0.18 sec)
mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(curdate());
Query OK, 1 row affected (0.23 sec)
mysql> insert into DateColumnWithNullDemo(LoginDateTime) values('2017-08-25 15:30:35');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(NULL);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DateColumnWithNullDemo(LoginDateTime) values('2016-12-25 16:55:55');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DateColumnWithNullDemo(LoginDateTime) values(NULL);
Query OK, 1 row affected (0.22 sec)
mysql> insert into DateColumnWithNullDemo(LoginDateTime) values('2014-11-12 10:20:23');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DateColumnWithNullDemo(LoginDateTime) values('2020-01-01 06:45:23');
Query OK, 1 row affected (0.23 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau:

mysql> select *from DateColumnWithNullDemo;

Sau đây là kết quả:

+----+---------------------+
| Id | LoginDateTime       |
+----+---------------------+
|  1 | 2018-01-29 17:07:20 |
|  2 | NULL                |
|  3 | NULL                |
|  4 | 2019-01-29 17:07:54 |
|  5 | 2019-01-29 00:00:00 |
|  6 | 2017-08-25 15:30:35 |
|  7 | NULL                |
|  8 | 2016-12-25 16:55:55 |
|  9 | NULL                |
| 10 | 2014-11-12 10:20:23 |
| 11 | 2020-01-01 06:45:23 |
+----+---------------------+
11 rows in set (0.00 sec)

Đây là truy vấn để đặt giá trị NULL cuối cùng và sắp xếp ngày theo thứ tự giảm dần:

mysql> select *from DateColumnWithNullDemo
   -> order by (LoginDateTime IS NULL), LoginDateTime DESC;

Sau đây là kết quả:

+----+---------------------+
| Id | LoginDateTime       |
+----+---------------------+
| 11 | 2020-01-01 06:45:23 |
|  4 | 2019-01-29 17:07:54 |
|  5 | 2019-01-29 00:00:00 |
|  1 | 2018-01-29 17:07:20 |
|  6 | 2017-08-25 15:30:35 |
|  8 | 2016-12-25 16:55:55 |
| 10 | 2014-11-12 10:20:23 |
|  2 | NULL                |
|  3 | NULL                |
|  7 | NULL                |
|  9 | NULL                |
+----+---------------------+
11 rows in set (0.00 sec)