简介
case函数
简单类型
case sex
when '1' then '男'
when '2' then '女’
else '其他' end
搜索类型
SELECT
employee_id,
name,
salary,
CASE
WHEN salary <= 3000 THEN 'Entry Level'
WHEN salary BETWEEN 3001 AND 7000 THEN 'Mid Level'
WHEN salary > 7000 THEN 'Senior Level'
ELSE 'Not Specified'
END AS salary_level
FROM
employees;
- CASE 语句是顺序敏感的,即它会从上到下评估 WHEN 子句,一旦找到第一个为真的条件,就会返回相应的结果,并忽略后面的所有条件。
- ELSE 子句是可选的。如果没有任何 WHEN 条件为真,并且没有提供 ELSE 子句,那么 CASE 表达式的结果将是 NULL。
- CASE 语句也可以用在 ORDER BY 子句中,用于根据复杂的条件对结果进行排序。
- 在某些数据库系统中(如 SQL Server),CASE 语句还可以用于 UPDATE 语句中,根据条件更新表中的值。
- else是可以不写的,end是必须要写的
- END 关键字在 CASE 语句中是必须有的。它标记着 CASE 表达式的结束。无论是否包含 ELSE 子句,END 都是必需的。
<update id="bitchUpdateStatueById">
UPDATE user_finetune_tasks
SET status = CASE service_name
<foreach collection="updates" item="update" separator=" ">
WHEN #{update.serviceName} THEN #{update.status}
</foreach>
END,
finished_time = CASE service_name
<foreach collection="updates" item="update" separator=" ">
WHEN #{update.serviceName} THEN #{update.endTime}
</foreach>
END
WHERE service_name IN
<foreach collection="updates" item="update" open="(" separator="," close=")">
#{update.serviceName}
</foreach>
</update>
简单形式的应用场景
简单形式和搜索形式的CASE语句在SQL中的应用场景有所不同,主要体现在它们处理条件逻辑的复杂性和灵活性上。简单形式的CASE语句通常用于基于单个表达式(或输入值)进行多个可能的匹配,并返回基于这些匹配的不同结果。这种形式的CASE语句在处理已知值的比较时非常有用。以下是对两者应用场景的具体说明,并附上相应的例子:
例子:
假设我们有一个名为products的表,包含以下列:product_id, product_name, 和 category_id。我们希望根据category_id的值来返回产品的类别名称。
SELECT
product_id,
product_name,
CASE category_id
WHEN 1 THEN '电子产品'
WHEN 2 THEN '服装'
WHEN 3 THEN '家居用品'
ELSE '其他'
END AS category_name
FROM
products;
在这个查询中,我们根据category_id的值来返回产品的类别名称。如果category_id为1,则返回’电子产品’;如果为2,则返回’服装’;如果为3,则返回’家居用品’;否则返回’其他’。
搜索形式的应用场景
搜索形式的CASE语句则更加灵活,它基于一系列布尔表达式(条件)进行评估,并返回基于这些条件的不同结果。这种形式的CASE语句在处理复杂的条件逻辑时非常有用。
例子:
假设我们有一个名为orders的表,包含以下列:order_id, customer_id, order_date, 和 order_amount。我们希望根据订单金额和订单日期来返回订单的优惠等级。
SELECT
order_id,
customer_id,
order_date,
order_amount,
CASE
WHEN order_amount > 1000 AND order_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN '高级优惠'
WHEN order_amount > 500 AND order_date >= DATE_SUB(CURDATE(), INTERVAL 14 DAY) THEN '中级优惠'
WHEN order_amount > 200 THEN '低级优惠'
ELSE '无优惠'
END AS discount_level
FROM
orders;
在这个查询中,我们根据订单金额和订单日期来返回订单的优惠等级。如果订单金额大于1000且订单日期在过去7天内,则返回’高级优惠’;如果订单金额大于500且订单日期在过去14天内,则返回’中级优惠’;如果订单金额大于200,则返回’低级优惠’;否则返回’无优惠’。
总结
简单形式的CASE语句适用于基于单个表达式进行多个可能的匹配,并返回基于这些匹配的不同结果。而搜索形式的CASE语句则更加灵活,适用于处理复杂的条件逻辑,并返回基于这些条件的不同结果。在实际应用中,可以根据具体需求选择适合的CASE语句形式来优化查询逻辑。