MySQL 的CASE WHEN 语句使用说明,需要的朋友可以参考下。
使用CASE WHEN进行字符串替换处理
- /*
- mysql> select * from sales;
- +-----+------------+--------+--------+--------+------+------------+
- | num | name | winter | spring | summer | fall | category |
- +-----+------------+--------+--------+--------+------+------------+
- | 1 | Java | 1067 | 200 | 150 | 267 | Holiday |
- | 2 | C | 970 | 770 | 531 | 486 | Profession |
- | 3 | JavaScript | 53 | 13 | 21 | 856 | Literary |
- | 4 | SQL | 782 | 357 | 168 | 250 | Profession |
- | 5 | Oracle | 589 | 795 | 367 | 284 | Holiday |
- | 6 | MySQL | 953 | 582 | 336 | 489 | Literary |
- | 7 | Cplus | 752 | 657 | 259 | 478 | Literary |
- | 8 | Python | 67 | 23 | 83 | 543 | Holiday |
- | 9 | PHP | 673 | 48 | 625 | 52 | Profession |
- +-----+------------+--------+--------+--------+------+------------+
- 9 rows in set (0.01 sec)
- mysql> SELECT name AS Name,
- -> CASE category
- -> WHEN "Holiday" THEN "Seasonal"
- -> WHEN "Profession" THEN "Bi_annual"
- -> WHEN "Literary" THEN "Random" END AS "Pattern"
- -> FROM sales;
- +------------+-----------+
- | Name | Pattern |
- +------------+-----------+
- | Java | Seasonal |
- | C | Bi_annual |
- | JavaScript | Random |
- | SQL | Bi_annual |
- | Oracle | Seasonal |
- | MySQL | Random |
- | Cplus | Random |
- | Python | Seasonal |
- | PHP | Bi_annual |
- +------------+-----------+
- 9 rows in set (0.00 sec)
- */
- Drop table sales;
- CREATE TABLE sales(
- num MEDIUMINT NOT NULL AUTO_INCREMENT,
- name CHAR(20),
- winter INT,
- spring INT,
- summer INT,
- fall INT,
- category CHAR(13),
- primary key(num)
- )type=MyISAM;
- insert into sales value(1, 'Java', 1067 , 200, 150, 267,'Holiday');
- insert into sales value(2, 'C',970,770,531,486,'Profession');
- insert into sales value(3, 'JavaScript',53,13,21,856,'Literary');
- insert into sales value(4, 'SQL',782,357,168,250,'Profession');
- insert into sales value(5, 'Oracle',589,795,367,284,'Holiday');
- insert into sales value(6, 'MySQL',953,582,336,489,'Literary');
- insert into sales value(7, 'Cplus',752,657,259,478,'Literary');
- insert into sales value(8, 'Python',67,23,83,543,'Holiday');
- insert into sales value(9, 'PHP',673,48,625,52,'Profession');
- select * from sales;
- SELECT name AS Name,
- CASE category
- WHEN "Holiday" THEN "Seasonal"
- WHEN "Profession" THEN "Bi_annual"
- WHEN "Literary" THEN "Random" END AS "Pattern"
- FROM sales;
简单语句
- SELECT CASE WHEN 10*2=30 THEN '30 correct'
- WHEN 10*2=40 THEN '40 correct'
- ELSE 'Should be 10*2=20'
- END;
多重表达式
- SELECT CASE 10*2
- WHEN 20 THEN '20 correct'
- WHEN 30 THEN '30 correct'
- WHEN 40 THEN '40 correct'
- END;
在SELECT查询中使用CASE WHEN
- /*
- mysql> SELECT Name, RatingID AS Rating,
- -> CASE RatingID
- -> WHEN 'R' THEN 'Under 17 requires an adult.'
- -> WHEN 'X' THEN 'No one 17 and under.'
- -> WHEN 'NR' THEN 'Use discretion when renting.'
- -> ELSE 'OK to rent to minors.'
- -> END AS Policy
- -> FROM DVDs
- -> ORDER BY Name;
- +-----------+--------+------------------------------+
- | Name | Rating | Policy |
- +-----------+--------+------------------------------+
- | Africa | PG | OK to rent to minors. |
- | Amadeus | PG | OK to rent to minors. |
- | Christmas | NR | Use discretion when renting. |
- | Doc | G | OK to rent to minors. |
- | Falcon | NR | Use discretion when renting. |
- | Mash | R | Under 17 requires an adult. |
- | Show | NR | Use discretion when renting. |
- | View | NR | Use discretion when renting. |
- +-----------+--------+------------------------------+
- 8 rows in set (0.01 sec)
- */
- Drop table DVDs;
- CREATE TABLE DVDs (
- ID SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
- Name VARCHAR(60) NOT NULL,
- NumDisks TINYINT NOT NULL DEFAULT 1,
- RatingID VARCHAR(4) NOT NULL,
- StatID CHAR(3) NOT NULL
- )
- ENGINE=INNODB;
- INSERT INTO DVDs (Name, NumDisks, RatingID, StatID)
- VALUES ('Christmas', 1, 'NR', 's1'),
- ('Doc', 1, 'G', 's2'),
- ('Africa', 1, 'PG', 's1'),
- ('Falcon', 1, 'NR', 's2'),
- ('Amadeus', 1, 'PG', 's2'),
- ('Show', 2, 'NR', 's2'),
- ('View', 1, 'NR', 's1'),
- ('Mash', 2, 'R', 's2');
- SELECT Name, RatingID AS Rating,
- CASE RatingID
- WHEN 'R' THEN 'Under 17 requires an adult.'
- WHEN 'X' THEN 'No one 17 and under.'
- WHEN 'NR' THEN 'Use discretion when renting.'
- ELSE 'OK to rent to minors.'
- END AS Policy
- FROM DVDs
- ORDER BY Name;