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

Chuyển đổi số nguyên YYYYMMDD (INT) sang DATE trong MySQL


Giới thiệu

Khi ngày tháng lưu dưới dạng số nguyên INT (ví dụ: 20190108 = 8/1/2019), MySQL cho phép chuyển đổi trực tiếp sang DATE bằng hàm DATE() (từ MySQL 5.7+).

Ví dụ minh họa

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

mysql> CREATE TABLE DemoTable (
    Number INT
);
mysql> INSERT INTO DemoTable VALUES 
(20190108), (20161231), (20170411);

Truy vấn chuyển đổi

mysql> SELECT DATE(Number) FROM DemoTable;

Kết quả

+--------------+
| DATE(Number) |
+--------------+
| 2019-01-08   |
| 2016-12-31   |
| 2017-04-11   |
+--------------+

Cách thức hoạt động

MySQL nhận diện số nguyên 8 chữ số theo pattern YYYYMMDD và tự chuyển sang DATE.

⚠️ Điều kiện và hạn chế

  • Số phải có **đúng 8 chữ số** (YYYYMMDD).
  • Giá trị phải là ngày hợp lệ (không phải 20190230, 20191301...).
  • Nếu số 6 chữ số (YYMMDD) hoặc 14 chữ số (YYYYMMDDHHMMSS), DATE() có thể không hoạt động đúng.

Cách chung hơn: STR_TO_DATE (cho mọi định dạng số)

SELECT STR_TO_DATE(CAST(Number AS CHAR), '%Y%m%d') FROM DemoTable;
  • Chuyển INT → CHAR → DATE theo pattern.
  • Linh hoạt cho YYMMDD (%y%m%d), YYYYMMDDHHMMSS (%Y%m%d%H%i%s)...

Khuyến nghị

Nên lưu ngày tháng bằng kiểu DATE/DATETIME thay vì INT để:

  • Đảm bảo tính toàn vẹn (invalid date không insert được).
  • Dùng được index, hàm DATE/TIME, so sánh trực tiếp.
  • Tiết kiệm dung lượng (DATE 3 bytes vs INT 4 bytes).