簡體   English   中英

用於日期時間SQL Server的IF ELSE語句

[英]IF ELSE statement for datetime SQL Server

我正在嘗試以秒為單位計算日期時間差。 我的代碼做什么->如果A.KIOSKLASTUPDATED NULL,請獲取當前時間。 然后計算時間差。 此部分正確完成。

現在,我想添加if else語句,以秒為單位的日期時間差異。 如果差異小於等於300,則執行其他操作

我收到錯誤消息:

關鍵字“ IF”附近的語法不正確。

我的代碼:

SELECT 
    (SELECT TOP 1 CONCAT(B.OPERATORID, ' ', B.OPERATORNAME) 
     FROM ACTIVITY_LOG AS B 
     WHERE B.KIOSKID = A.KIOSKID 
     ORDER BY B.CREATED_AT DESC) AS CURRENTUSER,
    IF(DATEDIFF(ss, ISNULL(CONVERT(VARCHAR(19), A.KIOSKLASTUPDATED, 20), CONVERT(VARCHAR(19), GETDATE(), 20)), CONVERT(VARCHAR(19), GETDATE(), 20)) <= 300)
    BEGIN
        SELECT '1' AS KIOSKSTATUS
    END
    ELSE
    BEGIN
        SELECT '0' AS KIOSKSTATUS
    END
FROM
    KIOSK_SETUP AS A 
LEFT JOIN 
    DEPARTMENT AS C ON A.DEPARTMENTID = C.ID

您需要一個case表達式:

SELECT (SELECT TOP 1 CONCAT(B.OPERATORID,' ',B.OPERATORNAME) FROM ACTIVITY_LOG AS B WHERE B.KIOSKID = A.KIOSKID ORDER BY B.CREATED_AT DESC
       ) AS CURRENTUSER,
       (CASE WHEN datediff(ss, ISNULL(CONVERT(VARCHAR(19), A.KIOSKLASTUPDATED, 20), CONVERT(VARCHAR(19), getdate(), 20)), CONVERT(VARCHAR(19), getdate(), 20)) <=300
             THEN '1' ELSE '0'
        END) AS KIOSKSTATUS
FROM KIOSK_SETUP A LEFT JOIN
     DEPARTMENT C 
     ON A.DEPARTMENTID = C.ID;

也就是說,查詢中還有許多其他問題:

  • 您將日期/時間值轉換為字符串 ,然后在它們上使用datetime函數。
  • 您的表別名應為表名稱的縮寫。 AC沒有意義。
  • IF()適用於T-SQL代碼,不適用於查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM