繁体   English   中英

SQL case 表达式没有给出想要的结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM