sql,CASE, WHEN condition1 THEN result1, WHEN condition2 THEN result2, ..., ELSE resultN,END;,
``PostgreSQL数据库基础之case用法详细说明
在PostgreSQL中,CASE表达式是一种非常强大的工具,它允许我们在查询中进行条件逻辑,CASE表达式的基本语法如下:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE resultN END
在这个语法中,condition1
, condition2
, ... 是我们要检查的条件,result1
, result2
, ... 是当这些条件满足时返回的结果,如果没有任何条件满足,那么将返回 ELSE
子句中的结果,如果没有 ELSE
子句,那么将返回 NULL。
下面我们通过一些例子来详细解释CASE表达式的用法。
1. 简单的CASE表达式
最简单的CASE表达式只包含一个条件和一个结果,我们可以使用CASE表达式来将数字转换为对应的星期几:
SELECT number, CASE number % 7 WHEN 0 THEN 'Sunday' WHEN 1 THEN 'Monday' WHEN 2 THEN 'Tuesday' WHEN 3 THEN 'Wednesday' WHEN 4 THEN 'Thursday' WHEN 5 THEN 'Friday' WHEN 6 THEN 'Saturday' END as day_of_week FROM numbers;
在这个例子中,我们使用了 number % 7
来计算数字除以7的余数,然后使用CASE表达式来将余数转换为对应的星期几。
2. 带有多个条件的CASE表达式
CASE表达式也可以包含多个条件和结果,我们可以使用CASE表达式来根据员工的绩效等级给他们分配奖金:
SELECT employee_id, performance_level, CASE performance_level WHEN 'A' THEN '5000' WHEN 'B' THEN '3000' WHEN 'C' THEN '1000' ELSE 'No bonus' END as bonus FROM employees;
在这个例子中,我们使用了CASE表达式来根据员工的绩效等级给他们分配不同的奖金,如果绩效等级为 'A',则奖金为5000;如果绩效等级为 'B',则奖金为3000;如果绩效等级为 'C',则奖金为1000;如果绩效等级不是这三个中的任何一个,那么就没有奖金。
3. 使用搜索函数的CASE表达式
CASE表达式还可以与搜索函数一起使用,LOWER()
, UPPER()
, SUBSTRING()
等,我们可以使用CASE表达式来将员工的名字转换为大写或小写:
SELECT employee_id, name, CASE LOWER(name) = name THEN name ELSE name || ' (uppercase)' END as uppercase_name, CASE UPPER(name) = name THEN name ELSE name || ' (lowercase)' END as lowercase_name FROM employees;
在这个例子中,我们使用了 LOWER()
函数来将员工的名字转换为小写,然后使用CASE表达式来判断名字是否已经是小写,如果是,那么就直接返回名字;如果不是,那么就返回名字加上 ' (lowercase)',我们还使用了 UPPER()
函数来将员工的名字转换为大写,然后使用CASE表达式来判断名字是否已经是大写,如果是,那么就直接返回名字;如果不是,那么就返回名字加上 ' (uppercase)'。
4. CASE表达式的其他用途
除了上述的用途,CASE表达式还有很多其他的用途,我们可以使用CASE表达式来进行数据类型转换,或者进行复杂的条件逻辑等,我们可以使用CASE表达式来将日期转换为对应的月份:
SELECT date, CASE TO_CHAR(date, 'Month') WHEN 'January' THEN '1' WHEN 'February' THEN '2' WHEN 'March' THEN '3' ... ELSE TO_CHAR(date, 'Month') || ' (unknown)' END as month_number FROM dates;
在这个例子中,我们使用了 TO_CHAR()
函数来将日期转换为字符串,然后使用CASE表达式来判断这个字符串是否表示一个已知的月份,如果是,那么就直接返回对应的月份编号;如果不是,那么就返回月份编号加上 ' (unknown)'。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/506303.html