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

แยกคอลัมน์หลัง Hyphen ใน MySQL ด้วย SUBSTRING_INDEX()

บทนำ

การแยกส่วนข้อความหลัง Delimiter ตัวสุดท้าย (เช่น Hyphen '-') ใช้ฟังก์ชัน SUBSTRING_INDEX() ด้วยพารามิเตอร์ count = -1

รูปแบบการใช้งาน

SELECT SUBSTRING_INDEX(yourColumnName, '-', -1) AS AliasName FROM yourTableName;

ตัวอย่างการสร้างตารางและเพิ่มข้อมูล

mysql> CREATE TABLE DemoTable (
    -> StreetName TEXT
    -> );
Query OK, 0 rows affected (0.60 sec)
mysql> INSERT INTO DemoTable VALUES('Paris Hill St.-CA-83745646');
mysql> INSERT INTO DemoTable VALUES('502 South Armstrong Street-9948443');

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์

+------------------------------------+
| StreetName                         |
+------------------------------------+
| Paris Hill St.-CA-83745646         |
| 502 South Armstrong Street-9948443 |
+------------------------------------+
2 rows in set (0.00 sec)

คำสั่งแยกส่วนหลัง Hyphen ตัวสุดท้าย

mysql> SELECT SUBSTRING_INDEX(StreetName, '-', -1) AS Split FROM DemoTable;

ผลลัพธ์

+----------+
| Split    |
+----------+
| 83745646 |
| 9948443  |
+----------+
2 rows in set (0.00 sec)

คำอธิบาย

  • SUBSTRING_INDEX(str, delim, count)
  • count > 0: นับ Delimiter จากซ้าย, คืนค่าส่วนก่อน Delimiter ตัวที่ count
  • count < 0: นับ Delimiter จากขวา, คืนค่าส่วนหลัง Delimiter ตัวที่ |count|
  • count = -1: ส่วนหลัง Delimiter ตัวสุดท้าย (Rightmost)

ตัวอย่างเพิ่มเติม

-- ข้อมูล: 'a-b-c-d'
SUBSTRING_INDEX('a-b-c-d', '-', 1)   -- 'a'           (ส่วนก่อน - ตัวแรก)
SUBSTRING_INDEX('a-b-c-d', '-', 2)   -- 'a-b'         (ส่วนก่อน - ตัวที่ 2)
SUBSTRING_INDEX('a-b-c-d', '-', 3)   -- 'a-b-c'       (ส่วนก่อน - ตัวที่ 3)
SUBSTRING_INDEX('a-b-c-d', '-', -1)  -- 'd'           (ส่วนหลัง - ตัวสุดท้าย)
SUBSTRING_INDEX('a-b-c-d', '-', -2)  -- 'c-d'         (ส่วนหลัง - ตัวที่ 2 จากท้าย)
SUBSTRING_INDEX('a-b-c-d', '-', -3)  -- 'b-c-d'       (ส่วนหลัง - ตัวที่ 3 จากท้าย)

การประยุกต์: ดึงนามสกุลไฟล์ (File Extension)

SELECT SUBSTRING_INDEX(FileName, '.', -1) AS Extension FROM Files;