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

ดึงข้อความก่อนอักขระสุดท้ายที่เจอใน MySQL

ใช้การผสมผสาน REVERSE(), SUBSTRING(), INSTR() เพื่อหาตำแหน่งอักขระสุดท้ายแล้วตัดส่วนหน้า

ไวยากรณ์

UPDATE yourTableName 
SET yourColumnName = REVERSE(SUBSTRING(REVERSE(yourColumnName), INSTR(REVERSE(yourColumnName), '.')));

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

1. สร้างตารางและข้อมูล

mysql> create table DemoTable (Words text);
mysql> insert into DemoTable values('Value1. Value2 .Value3.Value4.Value5');

2. อัปเดตเก็บเฉพาะส่วนก่อนจุดสุดท้าย

mysql> update DemoTable 
    -> set Words = REVERSE(SUBSTRING(REVERSE(Words), INSTR(REVERSE(Words), '.')));

ผลลัพธ์

+--------------------------------+
| Words                          |
+--------------------------------+
| Value1. Value2 .Value3.Value4. |
+--------------------------------+

คำอธิบายตรรกะ

  1. REVERSE(Words) → กลับสตริง: 5eluV.4eluV.3eluV. 2eluV.1eluV
  2. INSTR(..., '.') → หาตำแหน่งจุดแรก (ซึ่งคือจุดสุดท้ายของสตริงเดิม) = 2
  3. SUBSTRING(..., 2) → ตัดตั้งแต่ตำแหน่ง 2 ถึงสุด: .4eluV.3eluV. 2eluV.1eluV
  4. REVERSE(...) → กลับคืนมา: Value1. Value2 .Value3.Value4.

วิธีง่ายกว่า (MySQL 8.0+)

-- ใช้ REGEXP_SUBSTR (MySQL 8.0+)
SELECT REGEXP_SUBSTR(Words, '^.*\\.');  -- ทุกอย่างจนถึงจุดสุดท้าย

-- หรือใช้ SUBSTRING_INDEX (ถ้าต้องการก่อนจุดสุดท้าย ไม่รวมจุด)
SELECT SUBSTRING_INDEX(Words, '.', LENGTH(Words) - LENGTH(REPLACE(Words, '.', '')));