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

Sử dụng STR_TO_DATE làm cột ảo và lọc với HAVING trong MySQL

Khi cột lưu ngày dạng chuỗi, dùng STR_TO_DATE() trong SELECT để chuyển thành DATE, đặt alias, sau đó dùng HAVING để lọc trên alias (vì WHERE không dùng được alias).

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (AdmissionDate VARCHAR(100));
Query OK, 0 rows affected (0.55 sec)
mysql> INSERT INTO DemoTable VALUES('10/12/2017'), ('01/11/2018'), ('31/01/2019'), ('09/06/2019'), ('19/04/2019');
Query OK, 5 rows affected (0.18 sec)

Truy vấn chuyển đổi và lọc từ 2019-01-01

mysql> SELECT STR_TO_DATE(AdmissionDate, '%d/%m/%Y') AS newDate
    -> FROM DemoTable
    -> HAVING newDate >= '2019-01-01';

Kết quả:

+------------+
| newDate    |
+------------+
| 2019-01-31 |
| 2019-06-09 |
| 2019-04-19 |
+------------+
3 rows in set (0.00 sec)

Giải thích:

  • STR_TO_DATE(str, format): parse chuỗi theo format
  • %d/%m/%Y: ngày/tháng/năm 4 chữ số
  • HAVING lọc sau khi SELECT, có thể dùng alias newDate

Hiệu suất: Không dùng index. Nên lưu cột DATE thật và index.