簡體   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