mysql中case when用法

mysql中case when语句的使用方法: mysql中也有像php语言中switch case 这样的语句。 例如,下面的语句显示中文年月

select getdate() as 日期,case month(getdate()) 
when 11 then '十一' 
when 12 then '十二' 
else substring('一二三四五六七八九十', month(getdate()),1) 
end+'月' as 月份 

CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE 子句中使用 CASE。 首先让我们看一下 CASE 的语法。在一般的 SELECT 中,其语法如下:

SELECT <myColumnSpec> = 
CASE 
WHEN <A> THEN <somethingA> 
WHEN <B> THEN <somethingB> 
ELSE <somethingE> 
END 

在上面的代码中需要用具体的参数代替尖括号中的内容。下面是一个简单的例子:

USE pubs 
GO 
SELECT 
Title, 
'Price Range' = 
CASE 
WHEN price IS NULL THEN 'Unpriced' 
WHEN price < 10 THEN 'Bargain' 
WHEN price BETWEEN 10 and 20 THEN 'Average' 
ELSE 'Gift to impress relatives' 
END 
FROM titles 
ORDER BY price 
GO 

这是 CASE 的典型用法,但是使用 CASE 其实可以做更多的事情。比方说下面的 GROUP BY 子句中的 CASE:

SELECT 'Number of Titles', Count(*) 
FROM titles 
GROUP BY 
CASE 
WHEN price IS NULL THEN 'Unpriced' 
WHEN price < 10 THEN 'Bargain' 
WHEN price BETWEEN 10 and 20 THEN 'Average' 
ELSE 'Gift to impress relatives' 
END 
GO 
你甚至还可以组合这些选项,添加一个 ORDER BY 子句,如下所示: 
USE pubs 
GO 
SELECT 
CASE 
WHEN price IS NULL THEN 'Unpriced' 
WHEN price < 10 THEN 'Bargain' 
WHEN price BETWEEN 10 and 20 THEN 'Average' 
ELSE 'Gift to impress relatives' 
END AS Range, 
Title 
FROM titles 
GROUP BY 
CASE 
WHEN price IS NULL THEN 'Unpriced' 
WHEN price < 10 THEN 'Bargain' 
WHEN price BETWEEN 10 and 20 THEN 'Average' 
ELSE 'Gift to impress relatives' 
END, 
Title 
ORDER BY 
CASE 
WHEN price IS NULL THEN 'Unpriced' 
WHEN price < 10 THEN 'Bargain' 
WHEN price BETWEEN 10 and 20 THEN 'Average' 
ELSE 'Gift to impress relatives' 
END, 
Title 
GO 

注意,为了在 GROUP BY 块中使用 CASE,查询语句需要在 GROUP BY 块中重复 SELECT 块中的 CASE 块。 除了选择自定义字段之外,在很多情况下 CASE 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集。

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2015-09-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑白安全

MYSQL中case when语法的作用

严格来讲,不应该叫“mysql条件判断语句case when语法”的,它的专业语术是:“mysql流程控制语句case语法”;这一点对于做程序的人来说一定要清楚...

1032
来自专栏熊二哥

那些年我们写过的T-SQL(中篇)

中篇的重点在于,在复杂情况下使用表表达式的查询,尤其是公用表表达式(CTE),也就是非常方便的WITH AS XXX的应用,在SQL代码,这种方式至少可以提高一...

1787
来自专栏lgp20151222

MySQL使用判断

在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的...

1122
来自专栏小狼的世界

Mysql中的条件语句if、case

Mysql中的条件语句在我们对数据进行转换的时候比较有用,这样就不需要创建中转表。

1492
来自专栏数据和云

刑侦高考:如何用SQL解决环环相扣的刑侦推理问题

高考期间看到一个朋友在朋友圈里面贴了个图,上面是2018年刑侦科推理试题,看了一下题目,这些题目都是彼此依赖,很难找到一个题目作为入手点可以进一步分析,因此可能...

1194
来自专栏Hongten

hadoop2-HBase的Java API操作

Hbase提供了丰富的Java API,以及线程池操作,下面我用线程池来展示一下使用Java API操作Hbase。

1052
来自专栏机器学习算法与Python学习

SQL Server 学习笔记

之前学过一点数据库但由于一直没有使用忘得差不多了,最近重新复习一下相关的知识,把基本的语法YOU又看了一遍,为了强化记忆在写一遍~~~~~~ ? 基本的 se...

36815
来自专栏IT探索

mysql用法进阶

select name from table_name order by convert(name using gbk) asc

1303
来自专栏一个爱吃西瓜的程序员

学习SQL【8】-谓词和CASE表达式

谓词 什么是谓词 谓词就是返回值为真值的函数。对于通常的函数来说,返回值有可能是数字、字符串和日期等,但是谓词的返回值全部是真值。这也是谓词和函数的最大区别。 ...

3176
来自专栏乐沙弥的世界

批量 SQL 之 FORALL 语句

    对PL/SQL而言,任何的PL/SQL块或者子程序都是PL/SQL引擎来处理,而其中包含的SQL语句则由PL/SQL引擎发送SQL语句转交到SQL引擎...

732

扫码关注云+社区