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
我有以下情况。示例数据:
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