ภาพรวม
ใช้ SUBSTRING_INDEX() ดึงส่วนหลังจุด (Decimal Part) แล้ว CONCAT() ต่อกับค่าใหม่ที่ต้องการ
ฟังก์ชันหลัก
| ฟังก์ชัน | คำอธิบาย |
|---|---|
| SUBSTRING_INDEX(str, delim, count) | ดึงสตริงก่อน/หลัง Delimiter ครั้งที่ count (+ = นับจากซ้าย, - = นับจากขวา) |
| CONCAT(str1, str2, ...) | ต่อสตริง |
ตัวอย่างสมบูรณ์
1. สร้างตารางและข้อมูล (ตัวเลขมีจุดทศนิยม)
CREATE TABLE DemoTable1424 (Value VARCHAR(60));
INSERT INTO DemoTable1424 VALUES ('567.78483733');
INSERT INTO DemoTable1424 VALUES ('1023.45252443');
INSERT INTO DemoTable1424 VALUES ('7893322.5635543434');
INSERT INTO DemoTable1424 VALUES ('90944.665665');
2. ข้อมูลก่อนเปลี่ยน
SELECT * FROM DemoTable1424;
+--------------------+
| Value |
+--------------------+
| 567.78483733 |
| 1023.45252443 |
| 7893322.5635543434 |
| 90944.665665 |
+--------------------+
3. UPDATE: แทนที่ส่วนก่อนจุด ด้วย '10000.' แล้วต่อส่วนหลังจุด
UPDATE DemoTable1424
SET Value = CONCAT('10000.', SUBSTRING_INDEX(Value, '.', -1));
4. ผลลัพธ์
SELECT * FROM DemoTable1424;
+------------------+
| Value |
+------------------+
| 10000.78483733 |
| 10000.45252443 |
| 10000.5635543434 |
| 10000.665665 |
+------------------+
การทำงานของ SUBSTRING_INDEX(Value, '.', -1)
-- Count = -1: นับจากขวา หา Delimiter '.' ครั้งสุดท้าย คืนส่วนหลังมัน
SUBSTRING_INDEX('567.78483733', '.', -1) → '78483733'
SUBSTRING_INDEX('1023.45252443', '.', -1) → '45252443'
รูปแบบ SUBSTRING_INDEX อื่นๆ
| Count | ความหมาย | ตัวอย่าง 'a.b.c.d' |
|---|---|---|
| 1 | ซ้ายสุด ถึง Delimiter ตัวแรก | 'a' |
| 2 | ซ้ายสุด ถึง Delimiter ตัวที่ 2 | 'a.b' |
| -1 | ขวาสุด หลัง Delimiter ตัวสุดท้าย | 'd' |
| -2 | ขวาสุด หลัง Delimiter ตัวที่ 2 จากขวา | 'c.d' |
กรณีที่ไม่มี Delimiter
SUBSTRING_INDEX('nodot', '.', -1) -- คืน 'nodot' (ทั้งสตริง)
SUBSTRING_INDEX('nodot', '.', 1) -- คืน 'nodot' (ทั้งสตริง)
การประยุกต์: แยก Domain จาก Email
SELECT CONCAT('newdomain.', SUBSTRING_INDEX(Email, '@', -1))
FROM Users;
-- user@old.com → newdomain.old.com
สรุป
ใช้ CONCAT('new_prefix.', SUBSTRING_INDEX(col, '.', -1)) แทนที่ส่วนก่อนจุดทศนิยม (หรือ Delimiter ใดๆ) ให้เป็นค่าใหม่