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

MySQL: แสดง SUBSTRING หากสตริงสั้นกว่าที่กำหนด ไม่งั้นแสดงข้อความกำหนดเอง

เงื่อนไขแสดงผลแบบมีเงื่อนไข: SUBSTRING หากสั้นกว่า N ตัวอักษร, ไม่งั้น Custom Message

ใช้ CASE WHEN ร่วมกับ CHAR_LENGTH() และ SUBSTRING() เพื่อควบคุมการแสดงผลตามความยาวสตริง

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

mysql> create table DemoTable1402 (
    -> EmployeeName varchar(40)
    -> );
Query OK, 0 rows affected (0.62 sec)

mysql> insert into DemoTable1402 values('Adam Smith');
mysql> insert into DemoTable1402 values('Chris Brown');
mysql> insert into DemoTable1402 values('David Miller');
mysql> insert into DemoTable1402 values('Carol Taylor');

ข้อมูลและความยาว

+--------------+---------------+
| EmployeeName | CHAR_LENGTH() |
+--------------+---------------+
| Adam Smith   | 10            |
| Chris Brown  | 11            |
| David Miller | 12            |
| Carol Taylor | 12            |
+--------------+---------------+

คำสั่ง CASE WHEN + SUBSTRING

mysql> select *, 
    -> case 
    ->   when char_length(EmployeeName) <= 11 then substring(EmployeeName, 1, 5)
    ->   else 'EmployeeName is greater than 11'
    -> end as Result
    -> from DemoTable1402;

ผลลัพธ์

+--------------+---------------------------------+
| EmployeeName | Result                          |
+--------------+---------------------------------+
| Adam Smith   | Adam                            |
| Chris Brown  | Chris                           |
| David Miller | EmployeeName is greater than 11 |
| Carol Taylor | EmployeeName is greater than 11 |
+--------------+---------------------------------+

อธิบาย

  • CHAR_LENGTH(EmployeeName) <= 11 — ตรวจสอบความยาว (นับตัวอักษร ไม่ใช่ไบต์)
  • SUBSTRING(EmployeeName, 1, 5) — ดึง 5 ตัวอักษรแรก (position 1 = ตัวแรก)
  • ELSE '...' — ข้อความกำหนดเองเมื่อเกินความยาว

CHAR_LENGTH vs LENGTH

  • CHAR_LENGTH() — นับจำนวนตัวอักษร (Characters) — ใช้กับ multibyte (UTF-8) ได้ถูกต้อง
  • LENGTH() — นับจำนวนไบต์ (Bytes) — 1 ตัวอักษรไทย = 3 ไบต์ใน UTF-8

ขยาย: ใช้ IF() แทน CASE WHEN (สั้นกว่า)

SELECT EmployeeName,
       IF(CHAR_LENGTH(EmployeeName) <= 11, 
          SUBSTRING(EmployeeName, 1, 5), 
          'EmployeeName is greater than 11') AS Result
FROM DemoTable1402;

กรณีใช้งานจริง

  • Truncate คำอธิบายยาว: IF(CHAR_LENGTH(desc) > 100, CONCAT(SUBSTRING(desc, 1, 100), '...'), desc)
  • Masking: IF(CHAR_LENGTH(card) = 16, CONCAT(SUBSTRING(card, 1, 4), '****', SUBSTRING(card, -4)), card)
  • Validation: CASE WHEN LENGTH(phone) = 10 THEN 'Valid' ELSE 'Invalid' END