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

แทนที่ตัวเลขทุกหลักเป็น 0 ยกเว้นหลักแรกใน MySQL ด้วย CONCAT, LEFT, REPEAT

การ Masking ตัวเลข: แสดงหลักแรก ต่อด้วย 0 ทุกหลักที่เหลือ

ใช้ LEFT() ดึงตัวแรก + REPEAT('0', LENGTH-1) สร้างศูนย์ตามจำนวนหลักที่เหลือ แล้ว CONCAT() รวมกัน

Syntax

SELECT CONCAT(LEFT(number_col, 1), REPEAT('0', CHAR_LENGTH(number_col) - 1)) AS masked FROM table_name;

ตัวอย่างการใช้งาน

สร้างตารางและเพิ่มหมายเลขยาวต่างกัน:

mysql> CREATE TABLE DemoTable744 (Number VARCHAR(100));
Query OK, 0 rows affected (0.47 sec)

mysql> INSERT INTO DemoTable744 VALUES 
    ('537737736252'), ('989000099999'), ('343225666666664533'), ('4322111899494');
Query OK, 4 rows affected

ข้อมูลต้นฉบับ:

mysql> SELECT * FROM DemoTable744;
+--------------------+
| Number             |
+--------------------+
| 537737736252       |
| 989000099999       |
| 343225666666664533 |
| 4322111899494      |
+--------------------+
4 rows in set (0.00 sec)

แทนที่ทุกหลักเป็น 0 ยกเว้นหลักแรก:

mysql> SELECT CONCAT(LEFT(Number, 1), REPEAT('0', CHAR_LENGTH(Number) - 1)) AS AfterAddingZero FROM DemoTable744;
+--------------------+
| AfterAddingZero    |
+--------------------+
| 500000000000       |
| 900000000000       |
| 300000000000000000 |
| 4000000000000      |
+--------------------+
4 rows in set (0.06 sec)

ฟังก์ชันที่ใช้

กรณีใช้งานจริง (Data Masking)

  • บัตรเครดิต: แสดง 4 หลักแรก/หลัง → CONCAT(LEFT(cc,4), REPEAT('X', LENGTH-8), RIGHT(cc,4))
  • เบอร์โทร: CONCAT(LEFT(phone,3), REPEAT('X', LENGTH-6), RIGHT(phone,3))
  • เลขบัตรประชาชน: CONCAT(LEFT(id,1), REPEAT('X',11), RIGHT(id,1))
  • Email: CONCAT(LEFT(email,1), REPEAT('X', INSTR(email,'@')-2), SUBSTRING(email, INSTR(email,'@')-1))

UPDATE เพื่อ Mask จริงในตาราง

UPDATE DemoTable744 
SET Number = CONCAT(LEFT(Number, 1), REPEAT('0', CHAR_LENGTH(Number) - 1));
ฟังก์ชันหน้าที่
LEFT(str, n)ดึง n ตัวอักษรจากซ้าย
CHAR_LENGTH(str)นับจำนวนตัวอักษร (Characters)
REPEAT(str, count)ทำซ้ำ String count ครั้ง
CONCAT(str1, str2, ...)รวม String