เมื่อต้องการแสดงตัวเลขให้มีความยาวคงที่ โดยเติมศูนย์ (Zero-padding) ด้านหน้า ให้ใช้ฟังก์ชัน LPAD() (Left Pad)
Syntax
LPAD(str, length, pad_string)
สร้างตารางและข้อมูล (ความยาวไม่เท่ากัน)
mysql> create table DemoTable (Value varchar(20));
mysql> insert into DemoTable values('3646465'),('9485757591'),('485756'),('959585'),('124');
ข้อมูลต้นฉบับ
+------------+ | Value | +------------+ | 3646465 | | 9485757591 | | 485756 | | 959585 | | 124 | +------------+
คำสั่ง LPAD เติม 0 ให้ครบ 9 ตัว
mysql> select lpad(Value, 9, '0') from DemoTable;
ผลลัพธ์
+-------------------+ | lpad(Value,9,'0') | +-------------------+ | 003646465 | | 948575759 | | 000485756 | | 000959585 | | 000000124 | +-------------------+
คำอธิบาย
LPAD('3646465', 9, '0')- ความยาว 7 → เติม 0 อีก 2 ตัว = '003646465'LPAD('9485757591', 9, '0')- ความยาว 10 > 9 → ตัดทิ้งด้านซ้าย = '948575759' (สูญเสียตัวแรก!)
⚠️ ข้อควรระวัง: LPAD ตัดข้อมูลถ้ายาวกว่า Length!
-- ป้องกัน: ใช้ GREATEST หรือ CASE SELECT LPAD(Value, GREATEST(9, LENGTH(Value)), '0') FROM DemoTable; -- หรือ SELECT CASE WHEN LENGTH(Value) > 9 THEN Value ELSE LPAD(Value, 9, '0') END FROM DemoTable;
RPAD - เติมขวา
SELECT RPAD('ABC', 10, '0'); -- 'ABC0000000'
รูปแบบ Zero-padding ทั่วไป
| ความต้องการ | คำสั่ง | ตัวอย่าง Input | Output |
|---|---|---|---|
| ครบ 5 หลัก | LPAD(num, 5, '0') | 42 | 00042 |
| ครบ 10 หลัก | LPAD(num, 10, '0') | 12345 | 0000012345 |
| รหัสไปรษณีย์ 5 หลัก | LPAD(zip, 5, '0') | 123 | 00123 |
| เลขที่เอกสาร Running | LPAD(seq, 6, '0') | 1 | 000001 |
MySQL 8.0+ FORMAT() Alternative
-- FORMAT(n, decimals) - ใส่ Comma, ไม่ Zero-pad SELECT FORMAT(1234567, 0); -- '1,234,567' -- LPAD + FORMAT SELECT LPAD(FORMAT(num, 0), 10, '0');
Application Layer แทน
แนะนำทำ Zero-padding ที่ Application (PHP sprintf, Python f-string, Java String.format) แทนที่จะทำใน DB เพื่อแยก Presentation Logic