Sử dụng LPAD() để padding trái (left-pad) chuỗi số với ký tự '0' đến độ dài cố định.
Tạo bảng
mysql> CREATE TABLE DemoTable (Value VARCHAR(20));
Chèn dữ liệu (số chữ số khác nhau)
mysql> INSERT INTO DemoTable VALUES('3646465'), ('9485757591'), ('485756'), ('959585'), ('124');
Xem dữ liệu gốc
mysql> SELECT * FROM DemoTable;
+------------+ | Value | +------------+ | 3646465 | | 9485757591 | | 485756 | | 959585 | | 124 | +------------+
Padding 0 đến 9 chữ số
mysql> SELECT LPAD(Value, 9, '0') FROM DemoTable;
+-------------------+ | LPAD(Value,9,'0') | +-------------------+ | 003646465 | | 948575759 | | 000485756 | | 000959585 | | 000000124 | +-------------------+
Lưu ý: Hàng 2 bị cắt!
LPAD('9485757591', 9, '0') → '948575759' (cắt bớt 1 ký tự đầu vì chuỗi dài 10 > 9).
LPAD không mở rộng nếu chuỗi dài hơn độ dài mục tiêu — nó cắt (truncate) từ trái.
Cách an toàn: Chỉ pad nếu ngắn hơn
SELECT CASE
WHEN CHAR_LENGTH(Value) < 9 THEN LPAD(Value, 9, '0')
ELSE Value
END AS Padded_Value FROM DemoTable;
Hàm liên quan
| Hàm | Chức năng | Ví dụ |
|---|---|---|
LPAD(str, len, pad) | Padding trái | LPAD('123', 5, '0') → '00123' |
RPAD(str, len, pad) | Padding phải | RPAD('123', 5, '0') → '12300' |
ZEROFILL | Attribute cột số (tự pad 0 khi SELECT) | INT(5) ZEROFILL → 00123 |
Ứng dụng thực tế
- Mã sản phẩm, mã đơn hàng:
LPAD(id, 8, '0')→ '00000123' - Số tài khoản, thẻ: format cố định
- Sắp xếp chuỗi số đúng thứ tự số:
ORDER BY LPAD(num_col, 10, '0')
Lưu ý
- LPAD/RPAD trả về VARCHAR
- Nên xử lý format ở tầng ứng dụng (presentation layer) thay vì database
ZEROFILLdeprecated trong MySQL 8.0.17+, sẽ bị loại bỏ