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