Оператор IF ELSE для даты и времени SQL Server

Я пытаюсь рассчитать разницу в дате и времени в секунду. Что делает мой код -> Если столбец 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

зачем минусовать мой вопрос? объясни пожалуйста, я знаю причину

KIRPAL SINGH 14.03.2019 03:26
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
1
863
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно выражение 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, а не для запросов.

Другие вопросы по теме