[英]SQL case expression is not giving desired result
我有以下情况。 样本数据:
OCTeamID(整数) | OCTeamLastTime(日期时间) |
---|---|
1 | 1970-01-01 00:00:00 |
2 | 2022-01-21 00:37:23 |
3 | 1970-01-01 00:00:00 |
4 | 2022-01-21 00:37:23 |
5 | 1970-01-01 00:00:00 |
我正在尝试的是以下内容:
当OCTeamLastTime
列中的 Datetime 值高于当前日期时间CURRENT_TIMESTAMP
时,我希望 SQL 变量为Now
,否则将OCTeamLastTime
中的值用作CanDoOC
。
我目前正在尝试以下声明。 但这给了我现在每个结果的结果。
SELECT OCTeamName, OCTeamID, OCTeamLastTime, (
CASE WHEN(SELECT COUNT(OCTeamID) FROM OCTable WHERE OCTeamLastTime >= CURRENT_TIMESTAMP AND OCTeamID = OCTeamID) > 0 THEN 'Now' ELSE OCTeamLastTime END
) AS CanDoOC
FROM OCTable
我想在 php/html 的选项列表中使用这些结果。 基于上表的期望结果:
<option data-subtext="Next OC: <?php echo $SelectOCTeam['CanDoOC']; ?>" value="<?php echo $SelectOCTeam['OCTeamID']; ?>"><?php echo $SelectOCTeam['OCTeamName']; ?></option>
在这种情况下,它应该创建 5 个选项。 使用 Next OC:现在对于 ID 为 1,3 和 5 的团队以及其他选项的OCTeamLastTime
值。
有谁如何做到这一点? 因为我所做的没有工作,我想不出任何其他方法来完成这项工作。
我相信您只想要以下查询(没有子查询)
SELECT OCTeamName,OCTeamID,OCTeamLastTime,
CASE WHEN OCTeamLastTime >= CURRENT_TIMESTAMP
THEN 'Now'
ELSE OCTeamLastTime
END AS CanDoOC
FROM OCTable
您可以为此使用CASE
表达式:
SELECT CASE
WHEN OCTeamLastTime < CURRENT_TIMESTAMP THEN 'Now'
ELSE OCTeamLastTime
END AS CanDoOC
FROM ...
只需对查询稍作修改即可帮助您获得所需的 output
SELECT OCTeamName,OCTeamID,OCTeamLastTime,(OCTeamLastTime >= CURRENT_TIMESTAMP THEN 'Now' ELSE OCTteamLastTime END 的情况)作为来自 OCTable 的 CanDoOC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.