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

แทนที่ส่วนของสตริงก่อนจุด (Dot) ใน MySQL ด้วย CONCAT และ SUBSTRING_INDEX

ภาพรวม

ใช้ 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 ใดๆ) ให้เป็นค่าใหม่