SQL Server研习录(11)——CASE表达式

SQL Server研习录(11)——CASE表达式


版权声明

  • 本文原创作者:清风不渡
  • 博客地址:https://blog.csdn.net/WXKKang

首先我们来创建一组测试数据用来学习CASE表达式,代码如下:

CREATE TABLE student(
	s_id varchar(50) NOT NULL PRIMARY KEY,
	s_name varchar(50),
	s_gender varchar(50),
	s_age int
)

INSERT INTO student(s_id,s_name,s_gender,s_age) VALUES ('S101','Tom','male',18);
INSERT INTO student(s_id,s_name,s_gender,s_age) VALUES ('S102','Lucy','female',18);
INSERT INTO student(s_id,s_name,s_gender,s_age) VALUES ('S103','Jack','male',19);
INSERT INTO student(s_id,s_name,s_gender,s_age) VALUES ('S104','Bruce','male',16);
INSERT INTO student(s_id,s_name,s_gender,s_age) VALUES ('S105','Jayce','male',23);

一、CASE表达式

  计算条件列表,并返回多个可能的结果表达式之一,CASE表达式就像是Java语言中的switch…case语法一样,CASE表达式就是当满足某条WHEN后的条件表达式时返回它后面结果表达式

  CASE表达式有以下两种格式:

  • 简单CASE表达式,它通过将表达式与一组简单的表达式进行比较来确定结果
  • CASE搜索表达式:它通过计算一组布尔表达式来确定结果
      这两种方式,都支持通过可选的else参数,大部分情况下是可以实现相同的功能
      CASE可用于允许使用有效表达式的任意语句,例如:可以在SELECT、UPDATE、DELETE和SET等语句以及SELECT_LIST、IN、WHERE、ORDER BY和HAVING等子句中使用CASE

1、基本语法

  基本语法如下:

-- 简单的CASE表达式:
SELECT
CASE input_expression
WHEN when_expression THEN result_expression
WHEN when_expression THEN result_expression
...
ELSE else_result_expression END
FROM
databasename.dbo.tablename
-- CASE搜索表达式:
SELECT
CASE
WHEN boolean_expression THEN result_expression
WHEN boolean_expression THEN result_expression
...
ELSE else_result_expression END
FROM
databasename.dbo.tablename

  注释:
  (1)参数
  input_expression: 使用简单的case格式时计算的表达式,input_expression是任何有效的表达式
  WHEN when_expression: 使用简单的case格式时要与input_expression进行比较的简单表达式。when_expression是任何有效的表达式,input_expression及每个when_expression的数据类型必须相同或必须是隐式转换的数据类型
  THEN result_expression: 当input_expression=when_expression的计算结果为true时,或boolean_expression的计算结果为true时返回的表达式,result_expression是任何有效的表达式
  ELSE else_result_expression: 比较运算计算结果不为true时返回的表达式,如果忽略此参数且比较运算计算结果不为true,则CASE返回null,else_result_expression是任何有效的表达式,else_result_expression及任何result_expression的数据类型必须相同或必须是隐式转换的数据类型
  WHEN boolean_expression: 使用CASE搜索格式时所计算的布尔表达式,boolean_expression是任何有效的布尔表达式
  (2)返回类型
  CASE简单表达式:
  CASE简单表达式的工作方式如下:将第一个表达式与每个WHEN子句中的表达式进行比较,以确定它们是否等效,如果这些表达式等效,将返回then子句中的表达式
  仅用于等同性检查
  按指定的顺序计算每个 when 子句的 input_expression = when_expression
  返回首个 input_expression = when_expression 的计算结果为 true 的 result_expression
  如果 input_expression = when_expression 的计算结果均不为 true,则在指定了 else 子句的情况下,SQLServer数据库引擎将返回 else_result_expression;若没有指定 else 子句,则返回 null 值
  CASE搜索表达式:
  按指定顺序对每个 when 子句的 boolean_expression 进行计算
  返回首个 boolean_expression 的计算结果为 true 的 result_expression
  如果 boolean_expression 的计算结果均不为 true,则在指定了 else 子句的情况下,数据库引擎将返回 else_result_expression;若没有指定 else 子句,则返回 null 值
  (3)优缺点
  简单case函数注重简洁,但是它只适用于这种单字段的单值比较,而case搜索函数的优点在于适用于所有比较(包括多值比较)的情况

2、示例

  示例一: 下面我们就使用CASE简单表达式来简单实现学生名的中文翻译,代码如下:

SELECT s_id,s_name,'中文名'=
CASE s_name
WHEN 'Tom' THEN  '汤姆'
WHEN 'Lucy' THEN '露易丝'
WHEN 'Jack' THEN '杰克'
ELSE '无法识别'
END
,s_gender,s_age
FROM student

  执行结果如下:
在这里插入图片描述
  示例二: 下面我们就使用CASE搜索表达式来简单实现学生是否成年的判断,代码如下:

SELECT s_id,s_name,s_gender,s_age,'是否成年'=
CASE 
WHEN s_age>=18 THEN '已成年'
ELSE '未成年'
END
FROM student

  执行结果如下:
在这里插入图片描述

发布了92 篇原创文章 · 获赞 36 · 访问量 5137

猜你喜欢

转载自blog.csdn.net/WXKKang/article/details/104049129