mysql - 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
解决方案
你可以嵌套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";
推荐阅读
- routes - Nuxt.js 中不同子域的不同路由
- express - REST API 路由器转发到 Apollo GraphQL 端点
- android - 使用 Emteria OS 将多设备应用程序部署到 RaspBerry Pi 3 时出现异常
- markdown - 使用 Pandoc 时禁用“TeX 数学”
- python - 在 TKinter 中显示 OpenAI Gym 环境渲染
- c++ - 标准库的 C++ 问题
- apache-kafka - Kafka Streams(抑制):通过超时关闭 TimeWindow
- struct - 如何在 Racket 中提供与结构相关的所有功能
- rest - REST 过滤和了解结果的最佳实践是单数:列表还是单数?
- dart - Flutter - 使用firstwhere搜索数组中的元素