Đệm số 0 ở đầu (zero-padding) cho cột INT trong MySQL
Sử dụng LPAD() kết hợp CONVERT() để chuyển số thành chuỗi rồi đệm 0 bên trái đến độ dài cố định.
Cú pháp
SELECT LPAD(CONVERT(numberColumn, CHAR(8)), totalLength, '0') FROM yourTable;
Ví dụ: Đệm đến 10 chữ số
Tạo bảng:
mysql> CREATE TABLE paddingDemo (Number INT);
Chèn dữ liệu:
mysql> INSERT INTO paddingDemo VALUES (78), (560), (888995), (999994);
Dữ liệu gốc:
+--------+ | Number | +--------+ | 78 | | 560 | | 888995 | | 999994 | +--------+
Đệm 0 bên trái độ dài 10:
mysql> SELECT LPAD(CONVERT(Number, CHAR(8)), 10, '0') AS paddingWithZeros FROM paddingDemo;
Kết quả:
+------------------+ | paddingWithZeros | +------------------+ | 0000000078 | | 0000000560 | | 0000888995 | | 0000999994 | +------------------+
Giải thích
CONVERT(Number, CHAR(8)): Chuyển INT → VARCHAR (8 ký tự đủ cho INT)LPAD(str, len, padstr): Đệm chuỗi padstr bên trái đến độ dài len- Kết quả là VARCHAR, không phải số
Cách khác: ZEROFILL (tạo bảng)
CREATE TABLE zerofillDemo (
Id INT(5) ZEROFILL -- Hiển thị 00001, 00012...
);
- Chỉ ảnh hưởng hiển thị, giá trị lưu trữ vẫn là số
- Tự động thêm UNSIGNED
- Không khuyến nghị cho ứng dụng hiện đại (xử lý ở tầng presentation)
Cách khác: FORMAT / printf (MySQL 8.0+)
SELECT FORMAT(Number, 0) -- có dấu phẩy nghìn SELECT LPAD(CAST(Number AS CHAR), 10, '0') -- CAST thay CONVERT
Ứng dụng
- Mã số thứ tự: INV-000001, INV-000002
- Mã nhân viên: EMP000123
- Xuất báo cáo, file text fixed-width