SQL case when用法
时间:2022-03-14 07:02
说明,sql中的if和else 是不能在select 语句中使用的。只能用来控制sql程序的流程。只能用case when。
CREATE TABLE USER
(
NAME VARCHAR(20) NOT NULL,---姓名
SEX INTEGER,---性别(1、男 2、女)
BIRTHDAY DATE---生日
);
CASE使用场合1:把user表导出生成一个文件,要求性别为男或女,而不是1和2,怎么办?我们可以用如下的语句处理:
SELECT
NAME,
CASE SEX
WHEN 1 THEN ‘男‘
ELSE ‘女‘
END AS SEX,
BIRTHDAY
FROM USER;
CASE使用场合2:假设user目前没有值,然后你往user导入了一批数据,但是很不幸,错把男设置成为2,而把女设置成为1,现在要求你变换过来,怎么办?
UPDATE USER SET SEX=
(
CASE SEX
WHEN 1 THEN 2
WHEN 2 THEN 1
ELSE SEX
END
);
有时候,when中不是常值,需要判断,可以这样:
select name,
case
when birthday<‘1981‘ then ‘old‘
when birthday>‘1988‘ then ‘yong‘
else ‘ok‘
END YORN
from lee;
我们 来判断工资的等级,并统计每一等级的人数。SQL代码如下; SELECT CASE WHEN salary <= 500 THEN ‘1‘ WHEN salary > 500 AND salary <= 600 THEN ‘2‘ WHEN salary > 600 AND salary <= 800 THEN ‘3‘ WHEN salary > 800 AND salary <= 1000 THEN ‘4‘ ELSE NULL END salary_class, COUNT(*) FROM Table_A GROUP BY CASE WHEN salary <= 500 THEN ‘1‘ WHEN salary > 500 AND salary <= 600 THEN ‘2‘ WHEN salary > 600 AND salary <= 800 THEN ‘3‘ WHEN salary > 800 AND salary <= 1000 THEN ‘4‘ ELSE NULL END; 在Check中使用Case函数在很多情况下都是非常不错的解决方法。可能有很多人根本就不用Check,那么我建议你在看过下面的例子之后也尝试一下在SQL中使用Check。 下面我们来举个例子 公司A,这个公司有个规定,女职员的工资必须高于块。如果用Check和Case来表现的话,如下所示 CONSTRAINT check_salary CHECK ( CASE WHEN sex = ‘2‘ THEN CASE WHEN salary > 1000 THEN 1 ELSE 0 END ELSE 1 END = 1 ) 如果单纯使用Check,如下所示 CONSTRAINT check_salary CHECK ( sex = ‘2‘ AND salary > 1000 ) 女职员的条件倒是符合了,男职员就无法输入了。