使用CASE WHEN进行字符串替换处理

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:
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';  
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
存储 关系型数据库 数据库
什么是数据库表结构
什么是数据库表结构
|
存储 SQL 关系型数据库
【MySQL异常】Row size too large (> 1982). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNA
【MySQL异常】Row size too large (> 1982). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNA
275 0
|
SQL 存储 关系型数据库
异构数据库、异构数据源、分布式数据库三者的辨析区别
异构数据库系统是相关的多个数据库系统的集合,可以实现数据的共享和透明访问,每个数据库系统在加入异构数据库系统之前本身就已经存在,拥有自己的DMBS。异构数据库的各个组成部分具有自身的自治性,实现数据共享的同时,每个数据库系统仍保有自己的应用特性、完整性控制和安全性控制。
|
机器学习/深度学习 搜索推荐 算法
多任务学习之mmoe理论详解与实践
多任务学习之mmoe理论详解与实践
多任务学习之mmoe理论详解与实践
|
JavaScript 前端开发 编译器
JavaScript 代码规范
所有的 JavaScript 项目适用同一种规范 ## JavaScript 代码规范 代码规范通常包括以下几个方面: 变量和函数的命名规则 空格,缩进,注释的使用规则 其他常用规范…… 规范的代码可以更易于阅读与维护 代码规范一般在开发前规定,可以跟你的团
11854 0
|
5月前
|
存储 人工智能 弹性计算
阿里云服务器五代至八代实例对比:性能对比与精准选型指南参考
目前,阿里云服务器最新的实例规格已经升级到第九代,不过主售的云服务器实例规格还是以七代和八代云服务器为主。对于初次接触阿里云服务器实例规格的用户来说,可能并不清楚阿里云服务器五代、六代、七代、八代实例有哪些,以及它们之间有何区别。本文将详细介绍阿里云五代、六代、七代、八代云服务器实例规格,并对比它们在性能方面的提升,以供参考和选择。
|
自然语言处理 达摩院 索引
Elasticsearch 中文分词器
在使用Elasticsearch 进行搜索中文时,Elasticsearch 内置的分词器会将所有的汉字切分为单个字,对用国内习惯的一些形容词、常见名字等则无法优雅的处理,此时就需要用到一些开源的分词器,以下分别介绍几种常见的中文分词器
10048 2
Elasticsearch 中文分词器
|
11月前
|
机器学习/深度学习 数据采集 人工智能
AI 大模型助力客户对话分析
该评测深入分析了“AI大模型助力客户对话分析”方案,涵盖实践原理、实施方法、部署过程、功能满足度及潜在改进空间。通过NLP和机器学习技术,方案能有效提升服务质量和客户体验,但针对特定行业需求尚需定制化开发。
|
12月前
|
运维 Kubernetes Java
阿里云容器计算服务ACS ,更普惠易用、更柔性、更弹性的容器算力
ACS(阿里云容器计算服务)推出Serverless容器算力,提供更普惠、柔性、弹性的算力资源,适用于多种业务场景,如复合应用、ACK集成、EMR大数据处理等,帮助企业降低成本、提升效率。
|
安全 应用服务中间件 Linux
windows配置supervisor实现nginx自启
windows配置supervisor实现nginx自启
291 0