ใช้ 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 ตัวที่ countcount < 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;