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

SQL case expression is not giving desired result

我有以下情况。示例数据:

OCTeamID (int) OCTeamLastTime (datetime)
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 行中的日期时间值高于当前日期时间 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 的选项列表中使用这些结果。基于以上 table:

的期望结果
<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 ...

只需稍微修改您的查询即可帮助您获得所需的输出

SELECT OCTeamName、OCTeamID、OCTeamLastTime、 (CASE WHEN OCTeamLastTime >= CURRENT_TIMESTAMP THEN 'Now' ELSE OCTeamLastTime END) AS CanDoOC FROM OCTable