เงื่อนไขแสดงผลแบบมีเงื่อนไข: 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