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

ดึงนามสกุลไฟล์ (File Extension) จากชื่อไฟล์ใน MySQL ด้วย SUBSTRING_INDEX

ใช้ SUBSTRING_INDEX() ดึงส่วนหลังจุดสุดท้าย (.) เป็นนามสกุลไฟล์

ไวยากรณ์

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

สร้างตารางตัวอย่าง

mysql> CREATE TABLE getFileExtensionDemo (
    -> File_Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> File_Name TEXT
    -> );

เพิ่มข้อมูลตัวอย่าง (ชื่อไฟล์มีจุดหลายจุด)

mysql> INSERT INTO getFileExtensionDemo(File_Name) VALUES
('John.AllMySQLConcept.doc'),
('Introductiontojava.txt'),
('C and C++.AllDataStructureandAlgorithm.pdf'),
('C.Users.Desktop.AllMySQLScript.sql');

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

mysql> SELECT * FROM getFileExtensionDemo;

ผลลัพธ์:

+---------+--------------------------------------------+
| File_Id | File_Name                                  |
+---------+--------------------------------------------+
| 1       | John.AllMySQLConcept.doc                   |
| 2       | Introductiontojava.txt                     |
| 3       | C and C++.AllDataStructureandAlgorithm.pdf |
| 4       | C.Users.Desktop.AllMySQLScript.sql         |
+---------+--------------------------------------------+

ดึงนามสกุลไฟล์ (count = -1 = นับจากขวา)

mysql> SELECT SUBSTRING_INDEX(File_Name, '.', -1) AS AllFileExtension FROM getFileExtensionDemo;

ผลลัพธ์:

+------------------+
| AllFileExtension |
+------------------+
| doc              |
| txt              |
| pdf              |
| sql              |
+------------------+

อธิบาย SUBSTRING_INDEX(str, delim, count)

  • count > 0: นับ delimiter จากซ้าย คืนค่าส่วน ก่อน delimiter ตัวที่ count
  • count < 0: นับ delimiter จากขวา คืนค่าส่วน หลัง delimiter ตัวที่ |count|
  • count = -1: ส่วนหลัง delimiter ตัวสุดท้าย (เหมาะกับนามสกุลไฟล์)

กรณีไฟล์ไม่มีจุด (ไม่มี extension)

SELECT SUBSTRING_INDEX('README', '.', -1); -- คืนค่า 'README' ทั้งสตริง

กรณีไฟล์ขึ้นต้นด้วยจุด (hidden file)

SELECT SUBSTRING_INDEX('.gitignore', '.', -1); -- คืนค่า 'gitignore'

ดึงชื่อไฟล์โดยไม่มี extension (basename)

-- ซับซ้อนกว่า ต้องคำนวณตำแหน่งจุดสุดท้าย
SELECT
    File_Name,
    SUBSTRING_INDEX(File_Name, '.', -1) AS extension,
    SUBSTRING(File_Name, 1, LENGTH(File_Name) - LENGTH(SUBSTRING_INDEX(File_Name, '.', -1)) - 1) AS basename
FROM getFileExtensionDemo;