博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用CASE WHEN进行字符串替换处理
阅读量:5825 次
发布时间:2019-06-18

本文共 6017 字,大约阅读时间需要 20 分钟。

Java代码  
  1. /* 
  2. mysql> select * from sales; 
  3. +-----+------------+--------+--------+--------+------+------------+ 
  4. | num | name       | winter | spring | summer | fall | category   | 
  5. +-----+------------+--------+--------+--------+------+------------+ 
  6. |   1 | Java       |   1067 |    200 |    150 |  267 | Holiday    | 
  7. |   2 | C          |    970 |    770 |    531 |  486 | Profession | 
  8. |   3 | JavaScript |     53 |     13 |     21 |  856 | Literary   | 
  9. |   4 | SQL        |    782 |    357 |    168 |  250 | Profession | 
  10. |   5 | Oracle     |    589 |    795 |    367 |  284 | Holiday    | 
  11. |   6 | MySQL      |    953 |    582 |    336 |  489 | Literary   | 
  12. |   7 | Cplus      |    752 |    657 |    259 |  478 | Literary   | 
  13. |   8 | Python     |     67 |     23 |     83 |  543 | Holiday    | 
  14. |   9 | PHP        |    673 |     48 |    625 |   52 | Profession | 
  15. +-----+------------+--------+--------+--------+------+------------+ 
  16. 9 rows in set (0.01 sec) 
  17.  
  18. mysql> SELECT name AS Name, 
  19.     -> CASE category 
  20.     -> WHEN "Holiday" THEN "Seasonal" 
  21.     -> WHEN "Profession" THEN "Bi_annual" 
  22.     -> WHEN "Literary" THEN "Random" END AS "Pattern" 
  23.     -> FROM sales; 
  24. +------------+-----------+ 
  25. | Name       | Pattern   | 
  26. +------------+-----------+ 
  27. | Java       | Seasonal  | 
  28. | C          | Bi_annual | 
  29. | JavaScript | Random    | 
  30. | SQL        | Bi_annual | 
  31. | Oracle     | Seasonal  | 
  32. | MySQL      | Random    | 
  33. | Cplus      | Random    | 
  34. | Python     | Seasonal  | 
  35. | PHP        | Bi_annual | 
  36. +------------+-----------+ 
  37. 9 rows in set (0.00 sec) 
  38. */  
  39. Drop table sales;  
  40.     
  41. CREATE TABLE sales(  
  42.     num MEDIUMINT NOT NULL AUTO_INCREMENT,  
  43.     name CHAR(20),  
  44.     winter INT,  
  45.     spring INT,  
  46.     summer INT,  
  47.     fall INT,  
  48.     category CHAR(13),  
  49.     primary key(num)  
  50. )type=MyISAM;  
  51.   
  52. insert into sales value(1'Java'1067 , 200150267,'Holiday');  
  53. insert into sales value(2'C',970,770,531,486,'Profession');  
  54. insert into sales value(3'JavaScript',53,13,21,856,'Literary');  
  55. insert into sales value(4'SQL',782,357,168,250,'Profession');  
  56. insert into sales value(5'Oracle',589,795,367,284,'Holiday');  
  57. insert into sales value(6'MySQL',953,582,336,489,'Literary');  
  58. insert into sales value(7'Cplus',752,657,259,478,'Literary');  
  59. insert into sales value(8'Python',67,23,83,543,'Holiday');  
  60. insert into sales value(9'PHP',673,48,625,52,'Profession');  
  61.   
  62. select * from sales;  
  63.   
  64. SELECT name AS Name,  
  65. CASE category  
  66. WHEN "Holiday" THEN "Seasonal"  
  67. WHEN "Profession" THEN "Bi_annual"  
  68. WHEN "Literary" THEN "Random" END AS "Pattern"  
  69. FROM sales;     

简单语句

Java代码  
  1. SELECT CASE WHEN 10*2=30 THEN '30 correct'  
  2.    WHEN 10*2=40 THEN '40 correct'  
  3.    ELSE 'Should be 10*2=20'  
  4. END;  

多重表达式

Java代码  
  1. SELECT CASE 10*2  
  2.    WHEN 20 THEN '20 correct'  
  3.    WHEN 30 THEN '30 correct'  
  4.    WHEN 40 THEN '40 correct'  
  5. END;  

在SELECT查询中使用CASE WHEN

Java代码  
  1. /* 
  2. mysql> SELECT Name, RatingID AS Rating, 
  3.     ->    CASE RatingID 
  4.     ->       WHEN 'R' THEN 'Under 17 requires an adult.' 
  5.     ->       WHEN 'X' THEN 'No one 17 and under.' 
  6.     ->       WHEN 'NR' THEN 'Use discretion when renting.' 
  7.     ->       ELSE 'OK to rent to minors.' 
  8.     ->    END AS Policy 
  9.     -> FROM DVDs 
  10.     -> ORDER BY Name; 
  11. +-----------+--------+------------------------------+ 
  12. | Name      | Rating | Policy                       | 
  13. +-----------+--------+------------------------------+ 
  14. | Africa    | PG     | OK to rent to minors.        | 
  15. | Amadeus   | PG     | OK to rent to minors.        | 
  16. | Christmas | NR     | Use discretion when renting. | 
  17. | Doc       | G      | OK to rent to minors.        | 
  18. | Falcon    | NR     | Use discretion when renting. | 
  19. | Mash      | R      | Under 17 requires an adult.  | 
  20. | Show      | NR     | Use discretion when renting. | 
  21. | View      | NR     | Use discretion when renting. | 
  22. +-----------+--------+------------------------------+ 
  23. 8 rows in set (0.01 sec) 
  24. */  
  25.   
  26. Drop table DVDs;  
  27.   
  28. CREATE TABLE DVDs (  
  29.    ID SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,  
  30.    Name VARCHAR(60) NOT NULL,  
  31.    NumDisks TINYINT NOT NULL DEFAULT 1,  
  32.    RatingID VARCHAR(4) NOT NULL,  
  33.    StatID CHAR(3) NOT NULL  
  34. )  
  35. ENGINE=INNODB;  
  36.   
  37. INSERT INTO DVDs (Name, NumDisks, RatingID, StatID)  
  38. VALUES ('Christmas'1'NR''s1'),  
  39.        ('Doc',       1'G',  's2'),  
  40.        ('Africa',    1'PG''s1'),  
  41.        ('Falcon',    1'NR''s2'),  
  42.        ('Amadeus',   1'PG''s2'),  
  43.        ('Show',      2'NR''s2'),  
  44.        ('View',      1'NR''s1'),  
  45.        ('Mash',      2'R',  's2');  
  46.     
  47.   
  48. SELECT Name, RatingID AS Rating,  
  49.    CASE RatingID  
  50.       WHEN 'R' THEN 'Under 17 requires an adult.'  
  51.       WHEN 'X' THEN 'No one 17 and under.'  
  52.       WHEN 'NR' THEN 'Use discretion when renting.'  
  53.       ELSE 'OK to rent to minors.'  
  54.    END AS Policy  
  55. FROM DVDs  
  56. ORDER BY Name;  
  57.   
  58. #表的创建  
  59. CREATE TABLE `lee` (  
  60. `id` int(10) NOT NULL AUTO_INCREMENT,   
  61. `name` char(20) DEFAULT NULL,   
  62. `birthday` datetime DEFAULT NULL,   
  63. PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8  
  64.   
  65. #数据插入:  
  66. insert into lee(name,birthday) values ('sam','1990-01-01');  
  67. insert into lee(name,birthday) values ('lee','1980-01-01');  
  68. insert into lee(name,birthday) values ('john','1985-01-01');  
  69.   
  70.   
  71. #使用case when语句  
  72. select name,  
  73.  case  
  74.         when birthday<'1981' then 'old'  
  75.         when birthday>'1988' then 'yong'  
  76.         else 'ok' END YORN  
  77. from lee;  
  78.    
  79. select NAME,  
  80.  case name  
  81.      when 'sam' then 'yong'  
  82.         when 'lee' then 'handsome'  
  83.         else 'good' end  
  84. from lee;  
  85. #当然了case when语句还可以复合  
  86.   
  87. select name,birthday,  
  88.  case  
  89.      when birthday>'1983' then 'yong'  
  90.         when name='lee' then 'handsome'  
  91.         else 'just so so ' end  
  92. from lee;  
  93.   
  94. #在这里用sql语句进行日期比较的话,需要对年加引号。要不然可能结果可能和预期的结果会不同。我的mysql版本5.1  
  95.   
  96. #当然也可以用year函数来实现,以第一个sql为例  
  97.   
  98. select NAME,  
  99.  CASE  
  100.      when year(birthday)>1988 then 'yong'  
  101.         when year(birthday)<1980 then 'old'  
  102.         else 'ok' END  
  103. from lee;  
  104.   
  105. create table penalties  
  106. (  
  107.  paymentno INTEGER not NULL,  
  108.     payment_date DATE not null,  
  109.     amount DECIMAL(7,2) not null,  
  110.     primary key(paymentno)  
  111. )  
  112.   
  113. insert into penalties values(1,'2008-01-01',3.45);  
  114. insert into penalties values(2,'2009-01-01',50.45);  
  115. insert into penalties values(3,'2008-07-01',80.45);  
  116.   
  117. #对罚款登记分为三类,第一类low,包括大于0小于等于40的罚款,第二类moderate大于40  
  118. #到80之间的罚款,第三类high包含所有大于80的罚款。  
  119. #统计出属于low的罚款编号。  
  120.   
  121. #第一道题的解法与上面的相同  
  122. select paymentno,amount,  
  123.  case  
  124.      when amount>0 and amount<=40 then 'low'  
  125.         when amount>40 and amount<=80 then 'moderate'  
  126.         when amount>80 then 'high'  
  127.         else 'incorrect' end lvl  
  128. from `penalties`  
  129.   
  130. #统计出属于low的罚款编号。重点看这里的解决方法  
  131. #方法1.  
  132. select paymentno,amount  
  133. from `penalties`  
  134. where case  
  135.  when amount>0 and  amount<=40 then 'low'  
  136.     when amount>40 and amount<=80 then 'moderate'  
  137.     when amount>80 then 'high'  
  138.     else 'incorrect' end ='low';  
  139.   
  140. #方法2  
  141. select *  
  142. from (select paymentno,amount,  
  143.  case  
  144.      when amount>0 and amount<=40 then 'low'  
  145.         when amount>40 and amount<=80 then 'moderate'  
  146.         when amount>80 then 'high'  
  147.         else 'incorrect' end lvl  
  148. from `penalties`) as p  
  149. where p.lvl='low';  

转载地址:http://ntpdx.baihongyu.com/

你可能感兴趣的文章
路由器发布服务器
查看>>
实现跨交换机VLAN间的通信
查看>>
jquery中的data-icon和data-role
查看>>
python例子
查看>>
环境变量(总结)
查看>>
ios之UILabel
查看>>
Java基础之String,StringBuilder,StringBuffer
查看>>
1月9日学习内容整理:爬虫基本原理
查看>>
安卓中数据库的搭建与使用
查看>>
AT3908 Two Integers
查看>>
渐变色文字
查看>>
C++ 0X 新特性实例(比较常用的) (转)
查看>>
node生成自定义命令(yargs/commander)
查看>>
各种非算法模板
查看>>
如何创建Servlet
查看>>
.NET 设计规范--.NET约定、惯用法与模式-2.框架设计基础
查看>>
win7 64位+Oracle 11g 64位下使用 PL/SQL Developer 的解决办法
查看>>
BZOJ1997:[HNOI2010]PLANAR——题解
查看>>
BZOJ1014:[JSOI2008]火星人prefix——题解
查看>>
使用Unity3D引擎开发赛车游戏
查看>>