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

ดึงเฉพาะนามสกุลไฟล์จากคอลัมน์ชื่อไฟล์ใน MySQL

ใช้ฟังก์ชัน SUBSTRING_INDEX() ดึงข้อความหลังจุด (.) ตัวสุดท้าย เพื่อได้นามสกุลไฟล์

รูปแบบคำสั่ง

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

ตัวอย่าง

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

mysql> create table AllFiles (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> UserName varchar(10),
    -> FileName varchar(100)
    -> );

mysql> insert into AllFiles(UserName,FileName) values
    -> ('Larry','AddTwoNumber.java'),
    -> ('Mike','AddTwoNumber.python'),
    -> ('Sam','MatrixMultiplication.c'),
    -> ('Carol','vector.cpp');

2. ดึงนามสกุลไฟล์

mysql> select substring_index(FileName,'.',-1) AS ALLFILENAMEEXTENSIONS from AllFiles;
+-----------------------+
| ALLFILENAMEEXTENSIONS |
+-----------------------+
| java                  |
| python                |
| c                     |
| cpp                   |
+-----------------------+

การทำงานของ SUBSTRING_INDEX(str, delim, count)

  • count > 0: คืนค่าส่วนซ้ายของ delimiter ตัวที่ count
  • count < 0: คืนค่าส่วนขวาของ delimiter ตัวที่ |count| นับจากขวา
  • SUBSTRING_INDEX('file.name.txt', '.', -1) → 'txt'

กรณีพิเศษและการจัดการ

ถ้าต้องการนามสกุล 2 ระดับ (เช่น .tar.gz)

SELECT 
    FileName,
    SUBSTRING_INDEX(FileName, '.', -1) AS ext1,
    SUBSTRING_INDEX(SUBSTRING_INDEX(FileName, '.', -2), '.', 1) AS ext2
FROM AllFiles;
ชื่อไฟล์ผลลัพธ์หมายเหตุ
document.pdfpdfปกติ
.htaccesshtaccessไม่มีชื่อไฟล์ มีแค่นามสกุล
READMEREADMEไม่มีจุด คืนทั้งสตริง
archive.tar.gzgzดึงเฉพาะส่วนท้ายสุด