Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เติมศูนย์หน้าตัวเลขให้ครบ 9 หลักใน MySQL ด้วย LPAD

เมื่อต้องการแสดงตัวเลขให้มีความยาวคงที่ โดยเติมศูนย์ (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 ทั่วไป

ความต้องการคำสั่งตัวอย่าง InputOutput
ครบ 5 หลักLPAD(num, 5, '0')4200042
ครบ 10 หลักLPAD(num, 10, '0')123450000012345
รหัสไปรษณีย์ 5 หลักLPAD(zip, 5, '0')12300123
เลขที่เอกสาร RunningLPAD(seq, 6, '0')1000001

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