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

Truy vấn MySQL thêm số 0 vào đầu số có ít hơn 9 chữ số?

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àmChức năngVí dụ
LPAD(str, len, pad)Padding tráiLPAD('123', 5, '0') → '00123'
RPAD(str, len, pad)Padding phảiRPAD('123', 5, '0') → '12300'
ZEROFILLAttribute 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
  • ZEROFILL deprecated trong MySQL 8.0.17+, sẽ bị loại bỏ