深⼊理解mysql中casewhen流程控制语句
介绍mysql数据库中case when语句的⽤法,⾸先介绍case when语句的基础知识,然后提供了相关例⼦。⽐较全⾯的掌握case when的⽤法,case when在平时的开发过程中还是使⽤得⽐较多的。
⽂章⽬录
case when概述
CASE WHEN、IF、IFNULL都是MySQL中的流程控制函数。
1.CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result …] [ELSE result] END
2.CASE WHEN [condition] THEN result [WHEN [condition] THEN result …] [ELSE result] END
在第⼀个⽅案的返回结果中, value=compare-value。⽽第⼆个⽅案的返回结果是第⼀种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为NULL。
⼀个CASE表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境⽽定。如果⽤在字符串语境中,则返回结果味字符串。如果⽤在数字语境中,则返回结果为⼗进制值、实值或整数值。
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境⽽定。
如果expr2 或expr3中只有⼀个明确是 NULL,则IF() 函数的结果类型 为⾮NULL表达式的结果类型。
expr1 作为⼀个整数值进⾏计算,就是说,假如你正在验证浮点值或字符串值, 那么应该使⽤⽐较运算进⾏检验。
IF() (这⼀点在其被储存到临时表时很重要 ) 的默认返回值类型按照以下⽅式计算:
表达式返回值
expr2 或expr3 返回值为⼀个字符串。字符串
expr2 或expr3 返回值为⼀个浮点值。浮点值
expr2 或 expr3 返回值为⼀个整数。整数IFNULL(expr1,expr2)
假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使⽤的语境。
case when语法
case when语句,⽤于计算条件列表并返回多个可能结果表达式之⼀。CASE 具有两种格式:简单 CASE 函数将某个表达式与⼀组简单表达式进⾏⽐较以确定结果。 CASE 搜索函数计算⼀组布尔表达式以确定结果。 两种格式都⽀持可选的 ELSE 参数。
简单CASE函数
CASE input_expression
WHEN when_expression THEN
result_expression [...n ][
ELSE
else_result_expression
END
参数介绍:
1. input_expression 是使⽤简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的 Micr
osoft SQL Server 表达式。
2. WHEN when_expression 使⽤简单 CASE 格式时 input_expression 所⽐较的简单表达式。When_expression 是任意有效的
SQL Server 表达式。Input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。
3. 占位符 ,表明可以使⽤多个 WHEN when_expression THEN result_expression ⼦句或 WHEN Boolean_expression THEN
result_expression ⼦句。
4. THEN result_expression 当 input_expression = when_expression 取值为 TRUE,或者 Boolean_expression 取值 TRUE 时返
回的表达式。result expression 是任意有效的 SQL Server 表达式。
5. ELSE else_result_expression 当⽐较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且⽐较运算取值不为 TRUE,CASE
将返回 NULL 值。else_result_expression 是任意有效的 SQL Server 表达式。else_result_expression 和所有
result_expression 的数据类型必须相同,或者必须是隐性转换。
简单 CASE 函数: 返回结果值介绍:
1. 计算 input_expression,然后按指定顺序对每个 WHEN ⼦句的 input_expression = when_expression 进⾏计算。返回第⼀个取
值为 TRUE 的 (input_expression = when_expression) 的 result_expression。
2. 如果没有取值为 TRUE 的 input_expression = when_expression,则当指定 ELSE ⼦句时 SQL Server 将返回
else_result_expression;
3. 若没有指定 ELSE ⼦句,则返回 NULL 值。
CASE搜索函数
CASE
WHEN Boolean_expression THEN
result_expression [...n ][
ELSE
else_result_expression
END
参数介绍:
1. WHEN Boolean_expression 使⽤ CASE 搜索格式时所计算的布尔表达式。
2. Boolean_expression 是任意有效的布尔表达式。结果类型从 result_expressions 和可选 else_result_expression 的类型集合中返
回最⾼的优先规则类型。
3. 有关更多信息,请参见数据类型的优先顺序。
CASE 搜索函数:返回结果值介绍:
1. 按指定顺序为每个 WHEN ⼦句的 Boolean_expression 求值。返回第⼀个取值为 TRUE 的 Boolean_expression 的
result_expression。
2. 如果没有取值为 TRUE 的 Boolean_expression,则当指定 ELSE ⼦句时 SQL Server 将返回 else_result_expression;若没有指
定 ELSE ⼦句,则返回 NULL 值。
case when使⽤场景
等值转换
在设计数据库的时候总是会把⽤户的性别⽤int存储('0’为⼥,'1’为男),但是怎么把它转换成汉字显⽰呢?如果性别在配置表中进⾏了配置,可以两张表关联查询得到。获得在代码中进⾏if判断,进⾏转换。那还有没有其他⽐较好的办法,case when就可以。
简单CASE函数⽤例
switch case判断字符串原始表数据
sql语句
SELECT ID,
NAME AS'名字',
(CASE sex WHEN0THEN'⼥'ELSE'男'END)AS'性别'
FROM wh.user;
查询结果
范围转换
有的时候,也会遇到这种情况,按照⽤户成绩显⽰优(90+)、良(80-90)、及格(60-80)、未及格(60-),这个跟第⼀个不同的是,他是⼀个分数的范围,要怎么转换成汉字显⽰呢?你可能觉得很简单,不就是吧when那换成条件吗?先打住咱们往下看
CASE搜索函数⽤例
原始表数据
SQL语句
SELECT ID,
NAME AS'姓名'
,(CASE score WHEN score>=90THEN'优'WHEN score>=80THEN'良'
WHEN score>=60THEN'及格'ELSE'不及格'END)AS'等级'
FROM wh.score;
查询结果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论