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

MySQL Query ลบตัวเลขตัวแรก (First Digit) ด้วย SUBSTR

ใช้ SUBSTR() หรือ SUBSTRING() ตัดตัวอักษร

ฟังก์ชัน SUBSTR(str, pos) คืนค่า Substring ตั้งแต่ตำแหน่ง pos ถึงท้ายสตริง (1-based index)

Syntax

UPDATE table_name 
SET column_name = SUBSTR(column_name, 2);

ตัวอย่าง: ลบหลักแรกของเลข

CREATE TABLE DemoTable607 (Value VARCHAR(100));

INSERT INTO DemoTable607 VALUES
('83967364'), ('10939432'), ('932111');

ก่อน Update:

+----------+
| Value    |
+----------+
| 83967364 |
| 10939432 |
| 932111   |
+----------+

Update:

UPDATE DemoTable607 SET Value = SUBSTR(Value, 2);

หลัง Update:

+---------+
| Value   |
+---------+
| 3967364 |
| 0939432 |
| 32111   |
+---------+

SUBSTR Variants

Syntaxผลลัพธ์ตัวอย่าง
SUBSTR(str, pos)ตัวอักษร pos ถึงท้ายSUBSTR('abcde', 2) = 'bcde'
SUBSTR(str, pos, len)ตัวอักษร pos ยาว lenSUBSTR('abcde', 2, 3) = 'bcd'
SUBSTR(str, -pos)ตัวอักษร pos ตัวท้ายSUBSTR('abcde', -2) = 'de'

กรณีใช้งานจริง

  • ลบ Prefix Code: 'TH-12345' → '12345' (ใช้ SUBSTR(col, 4) หรือ REPLACE)
  • Masking: เลขบัตรเครดิต '1234567890123456' → '****3456' (ใช้ CONCAT + SUBSTR)
  • Extract Year: '2024-01-15' → '2024' (ใช้ SUBSTR(col, 1, 4) หรือ YEAR())

⚠️ ข้อควรระวัง

  1. Data Type: SUBSTR คืนค่า STRING เสมอ ถ้าคอลัมน์เป็น INT จะ Implicit Cast กลับ (อาจ Error ถ้าไม่ใช่ตัวเลข)
  2. Leading Zero: '10939432' → '0939432' (เก็บ Leading Zero ได้เพราะ VARCHAR)
  3. NULL Handling: SUBSTR(NULL, 2) = NULL
  4. WHERE Clause: ควรมี WHERE ป้องกัน Update ทั้งตาราง

ตัวอย่างปลอดภัย

UPDATE DemoTable607 
SET Value = SUBSTR(Value, 2)
WHERE Value IS NOT NULL 
  AND CHAR_LENGTH(Value) > 1;

ฟังก์ชันที่เกี่ยวข้อง

  • LEFT(str, len) - ตัวอักษรซ้าย len ตัว
  • RIGHT(str, len) - ตัวอักษรขวา len ตัว
  • MID(str, pos, len) - Alias ของ SUBSTR
  • REPLACE(str, from, to) - แทนที่substring (เหมาะกว่าสำหรับ Pattern คงที่)