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

MySQL: การจัดรูปแบบตัวเลข-สตริง เพื่อเติมศูนย์ทางซ้ายหลังเครื่องหมายทับ

การเติมศูนย์นำหน้าหลังเครื่องหมายทับ (/) ใน 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 หาตำแหน่ง / แบบไดนามิกแทน