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

เปลี่ยน Case ทุกคอลัมน์ในตาราง MySQL ทีเดียวด้วย LOWER()

เมื่อต้องการแปลงข้อมูลทุกคอลัมน์ในตารางเป็นตัวพิมพ์เล็ก (Lowercase) ทั้งหมดในคำสั่งเดียว ให้ใช้ UPDATE ร่วมกับฟังก์ชัน LOWER() บนทุกคอลัมน์ที่ต้องการ

สร้างตารางและข้อมูลตัวพิมพ์ใหญ่

mysql> create table DemoTable (
    Id varchar(100),
    StudentFirstName varchar(20),
    StudentLastName varchar(20),
    StudentCountryName varchar(10)
);
mysql> insert into DemoTable values('STU-101','John','Smith','US');
mysql> insert into DemoTable values('STU-102','John','Doe','UK');
mysql> insert into DemoTable values('STU-103','David','Miller','AUS');

ข้อมูลก่อนเปลี่ยน

+---------+------------------+-----------------+--------------------+
| Id      | StudentFirstName | StudentLastName | StudentCountryName |
+---------+------------------+-----------------+--------------------+
| STU-101 | John             | Smith           | US                 |
| STU-102 | John             | Doe             | UK                 |
| STU-103 | David            | Miller          | AUS                |
+---------+------------------+-----------------+--------------------+

คำสั่ง UPDATE ทุกคอลัมน์พร้อมกัน

mysql> update DemoTable 
set Id = lower(Id),
    StudentFirstName = lower(StudentFirstName),
    StudentLastName = lower(StudentLastName),
    StudentCountryName = lower(StudentCountryName);

ผลลัพธ์หลัง UPDATE

+---------+------------------+-----------------+--------------------+
| Id      | StudentFirstName | StudentLastName | StudentCountryName |
+---------+------------------+-----------------+--------------------+
| stu-101 | john             | smith           | us                 |
| stu-102 | john             | doe             | uk                 |
| stu-103 | david            | miller          | aus                |
+---------+------------------+-----------------+--------------------+

ฟังก์ชันเปลี่ยน Case

คำเตือนและ Best Practice

  • WHERE Clause - ควรเพิ่ม WHERE เพื่อจำกัดขอบเขต: WHERE Id NOT REGEXP '^[a-z]'
  • Index - การ UPDATE ทุกแถวจะ Rebuild Index ทั้งตาราง
  • Transaction - ห่อหุ้มใน Transaction เพื่อ Rollback ได้
  • Collation - ใช้ Collation Case-Insensitive (ci) แทนการเก็บ Lowercase จริง ก็ได้
  • Backup - สำรองข้อมูลก่อนรัน UPDATE จำนวนมาก

ทางเลือก: ใช้ View แทนการ UPDATE

CREATE VIEW DemoTable_Lower AS
SELECT LOWER(Id) as Id, LOWER(StudentFirstName) as StudentFirstName, ...
FROM DemoTable;

วิธีนี้ไม่เปลี่ยนข้อมูลจริง แต่อ่านได้เป็น Lowercase เสมอ

ฟังก์ชันผลลัพธ์ตัวอย่าง
LOWER() / LCASE()ตัวพิมพ์เล็ก'ABC' → 'abc'
UPPER() / UCASE()ตัวพิมพ์ใหญ่'abc' → 'ABC'
UPPER(SUBSTR(str,1,1)) + LOWER(SUBSTR(str,2))Capitalize (ตัวแรกใหญ่)'john' → 'John'