自学内容网 自学内容网

MYSQL CASE用法

MySQL 中的 CASE 语句是一种流程控制语句,它在 SQL 查询中提供条件逻辑,类似于编程语言中的 if...elseif...else 结构。

CASE 语句有两种主要形式:简单 CASE 表达式和搜索 CASE 表达式。

简单 CASE 表达式

这种形式的 CASE 用来比较一个表达式与一系列值,并根据匹配的情况返回对应的值。

语法如下:

CASE column_name
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ...
    ELSE default_result
END
  • column_name:是要检查的列名或表达式。
  • value1, value2, ...:是要与 column_name 比较的值。
  • result1, result2, ...:是当比较为真时返回的值。
  • ELSE default_result:是可选的,默认情况下返回的值,如果没有匹配项。

搜索 CASE 表达式

搜索 CASE 语句更灵活,可以用于基于任意条件(不仅仅是等于某个值)来返回结果。

语法如下:

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END
  • condition1, condition2, ...:是任意条件表达式。
  • result1, result2, ...:是当相应条件为真时返回的值。
  • ELSE default_result:同样是可选的,默认返回值。

示例

假设有一个 employees 表,包含 salary 列,我们想根据薪水范围分类员工:

SELECT 
    employee_name,
    CASE
        WHEN salary < 50000 THEN '低薪'
        WHEN salary BETWEEN 50000 AND 100000 THEN '中薪'
        ELSE '高薪'
    END AS salary_category
FROM employees;

在这个例子中,我们使用了搜索 CASE 语句来根据员工的薪水分配类别。

记住,如果没有任何 WHEN 条件为真,并且没有 ELSE 部分,CASE 表达式会返回 NULL。

一个例子:

排序:待整改状态-按时间倒序排>未整改-时间倒叙>已整改/不需要整改-时间倒序

`status` 状态:RECTIFIED 已整改;UN_RECTIFIED 未整改; NORMAL 未发现问题;RECORD_TIME 登记时间; latest_rectify_time 最晚可整改时间

SELECT
        `status`, latest_rectify_time
FROM
        t_crp_inspection_advert_record 

ORDER BY
        CASE 
                WHEN `status` = 'UN_RECTIFIED' AND record_time > DATE_SUB(CURDATE(), INTERVAL 7 DAY)  THEN 1
                WHEN `status` = 'UN_RECTIFIED' AND record_time <= DATE_SUB(CURDATE(), INTERVAL 7 DAY)  THEN 2
                WHEN `status` IN ('RECTIFIED ', 'NORMAL') THEN 3
                ELSE 4
  END,
        create_time DESC


原文地址:https://blog.csdn.net/m0_59856692/article/details/140458994

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!