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

MySQL ตั้งค่า Special Character ตามเงื่อนไขด้วย IF()

ใช้ IF() Function ตั้งค่าตามเงื่อนไข (Conditional Expression)

IF(condition, true_value, false_value) ใช้ใน SELECT, SET, WHERE ได้ คืนค่า true_value ถ้า condition TRUE มิฉะนั้น false_value

ตัวอย่าง: แสดงชื่อลูกค้าที่อายุ > 50, ไม่อย่างนั้นแสดง Dash

CREATE TABLE DemoTable637 (
    ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientName VARCHAR(100),
    ClientAge INT
);

INSERT INTO DemoTable637(ClientName, ClientAge) VALUES
('Chris', 23), ('Robert', 24), ('David', 57), ('Carol', 60);

Query:

SELECT IF(ClientName IS NOT NULL AND ClientAge > 50, ClientName, '-------------')
FROM DemoTable637;

ผลลัพธ์:

+--------------------------------------------------------------------------+
| IF(ClientName IS NOT NULL AND ClientAge > 50, ClientName, '-------------') |
+--------------------------------------------------------------------------+
| -------------                                                            |
| -------------                                                            |
| David                                                                    |
| Carol                                                                    |
+--------------------------------------------------------------------------+

IF() vs CASE WHEN

คุณสมบัติIF()CASE WHEN
SyntaxIF(cond, true, false)CASE WHEN cond THEN val ELSE val END
Conditions1 Condition (True/False)หลาย Conditions (WHEN...THEN...)
ReadabilitySimple CasesComplex Logic
Standard SQLMySQL ExtensionANSI SQL

CASE WHEN Equivalent

SELECT CASE 
    WHEN ClientName IS NOT NULL AND ClientAge > 50 THEN ClientName
    ELSE '-------------'
END AS display_name
FROM DemoTable637;

Nested IF Example

SELECT 
    ClientName,
    ClientAge,
    IF(ClientAge >= 60, 'Senior',
        IF(ClientAge >= 18, 'Adult', 'Minor')
    ) AS age_group
FROM DemoTable637;

ใช้ใน UPDATE

UPDATE DemoTable637
SET ClientName = IF(ClientAge > 50, CONCAT('VIP-', ClientName), ClientName);

⚠️ NULL Handling ใน IF()

-- Condition เป็น NULL -> FALSE branch
SELECT IF(NULL, 'yes', 'no');  -- 'no'

-- True Value เป็น NULL -> คืน NULL
SELECT IF(1 > 0, NULL, 'no');  -- NULL

-- ใช้ COALESCE กัน
SELECT IF(ClientAge > 50, COALESCE(ClientName, 'Unknown'), 'N/A');

MySQL 8.0: IF() ใน Generated Column

ALTER TABLE DemoTable637
ADD COLUMN age_group VARCHAR(10) 
GENERATED ALWAYS AS (
    IF(ClientAge >= 60, 'Senior',
        IF(ClientAge >= 18, 'Adult', 'Minor')
    )
) STORED;