การเติมศูนย์นำหน้าหลังเครื่องหมายทับ (/) ใน MySQL
บทความนี้สาธิตวิธีการจัดรูปแบบข้อมูลแบบตัวเลข-สตริง (number-string) ที่คั่นด้วยเครื่องหมายทับ (/) โดยการเติมศูนย์ (zero-padding) ด้านซ้ายของส่วนตัวเลขหลังเครื่องหมายทับ ให้มีความกว้างเท่ากันทุกแถว โดยอิงจากค่าที่มีตัวเลขมากที่สุด
สร้างตารางตัวอย่าง
mysql> create table DemoTable1369 (
-> BatchId varchar(20)
-> );
Query OK, 0 rows affected (0.46 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable1369 values('19/5');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1369 values('19/78');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1369 values('19/567');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1369 values('19/1234');
Query OK, 1 row affected (0.11 sec)
แสดงข้อมูลก่อนจัดรูปแบบ
mysql> select * from DemoTable1369;
+---------+ | BatchId | +---------+ | 19/5 | | 19/78 | | 19/567 | | 19/1234 | +---------+ 4 rows in set
คำสั่ง SQL สำหรับจัดรูปแบบ (เติมศูนย์ให้ครบ 4 หลัก)
ค่าสูงสุดคือ 1234 (4 หลัก) ดังนั้นจึงเติมศูนย์ให้ทุกค่ามี 4 หลักหลังเครื่องหมายทับ
mysql> select
-> concat(left(BatchId,3), lpad(substring(BatchId, 4), 4, '0'))
-> from DemoTable1369;
ผลลัพธ์หลังจัดรูปแบบ
+--------------------------------------------------------------+ | concat(left(BatchId,3), lpad(substring(BatchId, 4), 4, '0')) | +--------------------------------------------------------------+ | 19/0005 | | 19/0078 | | 19/0567 | | 19/1234 | +--------------------------------------------------------------+ 4 rows in set (0.00 sec)
อธิบายการทำงาน
left(BatchId,3)— ดึง 3 ตัวอักษรแรกสุด (คือ19/)substring(BatchId, 4)— ดึงสตริงตั้งแต่ตำแหน่งที่ 4 เป็นต้นไป (คือตัวเลขหลัง /)lpad(..., 4, '0')— เติมศูนย์ทางซ้ายให้ยาว 4 ตัวอักษรconcat(...)— รวมสองส่วนกลับเข้าด้วยกัน
หมายเหตุ: วิธีนี้ใช้ได้เมื่อส่วนหน้าของสตริง (ก่อน /) มีความยาวคงที่ หากความยาวไม่คงที่ ควรใช้ substring_index หรือ locate หาตำแหน่ง / แบบไดนามิกแทน