Я пытаюсь рассчитать разницу в дате и времени в секунду. Что делает мой код -> Если столбец A.KIOSKLASTUPDATED равен NULL, получить текущее время. Затем посчитайте разницу во времени. Эта часть выполнена правильно.
Теперь я хочу добавить оператор if else для разницы даты и времени в секундах. Если разница <= 300, сделайте что-нибудь еще, сделайте что-нибудь еще
Я получаю сообщение об ошибке:
Incorrect syntax near the keyword '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;
Тем не менее, у вас есть множество других проблем в запросе:
A и C не имеют смысла.IF() предназначен для кода T-SQL, а не для запросов.
зачем минусовать мой вопрос? объясни пожалуйста, я знаю причину