การดึงตัวอักษรแรกจากสตริงด้วยฟังก์ชัน LEFT() และ UPPER()
ฟังก์ชัน LEFT(str, n) คืนค่าตัวอักษร n ตัวแรกจากด้านซ้ายของสตริง ร่วมกับ UPPER() เพื่อทำให้เป็นตัวพิมพ์ใหญ่
รูปแบบคำสั่ง
SELECT UPPER(LEFT(column_name, 1)) AS first_letter FROM table_name;
ตัวอย่าง: ดึงตัวอักษรแรกของชื่อ
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(100)
);
INSERT INTO DemoTable (FirstName) VALUES ('John');
INSERT INTO DemoTable (FirstName) VALUES ('Adam');
INSERT INTO DemoTable (FirstName) VALUES ('Jace');
INSERT INTO DemoTable (FirstName) VALUES ('Chris');
INSERT INTO DemoTable (FirstName) VALUES ('Bob');
INSERT INTO DemoTable (FirstName) VALUES ('Carol');
2. ดูข้อมูลทั้งหมด
SELECT * FROM DemoTable;
ผลลัพธ์:
+----+-----------+
| Id | FirstName |
+----+-----------+
| 1 | John |
| 2 | Adam |
| 3 | Jace |
| 4 | Chris |
| 5 | Bob |
| 6 | Carol |
+----+-----------+
3. ดึงตัวอักษรแรก พร้อมจัดเรียงตามชื่อ
SELECT Id, FirstName, UPPER(LEFT(FirstName, 1)) AS FirstLetter
FROM DemoTable
ORDER BY FirstName;
ผลลัพธ์:
+----+-----------+-------------+
| Id | FirstName | FirstLetter |
+----+-----------+-------------+
| 2 | Adam | A |
| 5 | Bob | B |
| 6 | Carol | C |
| 4 | Chris | C |
| 3 | Jace | J |
| 1 | John | J |
+----+-----------+-------------+
ฟังก์ชันที่เกี่ยวข้อง
| ฟังก์ชัน | คำอธิบาย | ตัวอย่าง |
|---|---|---|
LEFT(str, n) | n ตัวอักษรแรกจากซ้าย | LEFT('Hello', 2) → 'He' |
RIGHT(str, n) | n ตัวอักษรสุดท้ายจากขวา | RIGHT('Hello', 2) → 'lo' |
SUBSTRING(str, pos, len) | ดึงส่วนของสตริง | SUBSTRING('Hello', 2, 3) → 'ell' |
SUBSTR(str, pos, len) | เหมือน SUBSTRING | เหมือนกัน |
MID(str, pos, len) | Alias ของ SUBSTRING | เหมือนกัน |
การใช้งานขั้นสูง
จัดกลุ่มตามตัวอักษรแรก (Alphabetical Grouping)
SELECT
UPPER(LEFT(FirstName, 1)) AS FirstLetter,
COUNT(*) AS NameCount,
GROUP_CONCAT(FirstName ORDER BY FirstName) AS Names
FROM DemoTable
GROUP BY FirstLetter
ORDER BY FirstLetter;
จัดการค่า NULL และสตริงว่าง
SELECT
Id,
FirstName,
CASE
WHEN FirstName IS NULL OR FirstName = '' THEN '?'
ELSE UPPER(LEFT(FirstName, 1))
END AS FirstLetter
FROM DemoTable;
ประสิทธิภาพ
LEFT()และUPPER()ทำงานเร็วมาก (O(1) ต่อแถว)- หากต้องการค้นหา/จัดกลุ่มบ่อย ควรสร้าง Generated Column + Index:
ALTER TABLE DemoTable
ADD COLUMN FirstLetter CHAR(1)
GENERATED ALWAYS AS (UPPER(LEFT(FirstName, 1))) STORED,
ADD INDEX idx_first_letter (FirstLetter);