首页 > 解决方案 > mySQL 添加条件内 case 子句

问题描述

本质上,我有以下存储过程可以给出正确的响应,但我想添加额外的逻辑来说明 TimeDiff 的响应是否为负,以 0 响应,否则以差异响应 (TimeLeft)。

BEGIN

SELECT
`Person`,`Code`,
CASE 
WHEN `Problem` = "Large" 
THEN 500 - (TIME_TO_SEC((TimeDiff(Now(),`Start`)/60))) END AS TimeLeft

FROM Table1
WHERE `Code` = "1111"; 

END

标签: mysqlsql

解决方案


你可以嵌套CASE在里面CASE

SELECT
    `Person`,
    `Code`,
    CASE WHEN 
        `Problem` = "Large" 
    THEN 
        CASE WHEN
            500 - (TIME_TO_SEC((TimeDiff(Now(),`Start`)/60))) < 0
        THEN
            0
        ELSE
            500 - (TIME_TO_SEC((TimeDiff(Now(),`Start`)/60))) 
        END
    END AS TimeLeft
FROM Table1
WHERE `Code` = "1111"; 

或者,您可以使用GREATEST特定于 MySQL 的函数:

SELECT
    `Person`,
    `Code`,
    CASE WHEN 
        `Problem` = "Large" 
    THEN
        GREATEST(500 - (TIME_TO_SEC((TimeDiff(Now(),`Start`)/60))), 0)
    END AS TimeLeft
FROM Table1
WHERE `Code` = "1111"; 

推荐阅读