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

วิธีดึงตัวอักษรแรกจากข้อความในคอลัมน์มาแสดงในคอลัมน์ใหม่ด้วย LEFT() ใน MySQL

การดึงตัวอักษรแรกจากสตริงด้วยฟังก์ชัน 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);