SQL - DATEDIFF для расчета дней - PullRequest
0 голосов
/ 22 февраля 2020

Нужна помощь здесь. У меня есть этот синтаксис, который я считаю неправильным - требуется незначительное исправление

DATEDIFF(DAY, GETDATE(), DATEADD(DAY, 3, ESI.EventStatusDate)) AS BackloggedDays 

Что я на самом деле пытаюсь сказать, так это то, какой бы ни была дата состояния события (добавьте 3 дня, как льготный период), сравните это на текущую дату (получить дату) и скажите мне, сколько дней позади (задержка). Если обратного журнала нет, установите 0 дней

1 Ответ

0 голосов
/ 22 февраля 2020

Я думаю, вы хотите что-то вроде этого ...

DECLARE @EventStatusDate DATE;

SET @EventStatusDate = '02/17/2020';

SELECT
    IIF(DATEDIFF(DAY, GETDATE(), DATEADD(DAY, 3, @EventStatusDate)) > 0
      , 0
      , DATEDIFF(DAY, GETDATE(), DATEADD(DAY, 3, @EventStatusDate))) AS BackloggedDaysWithGrace;

Функция IIF устанавливает значение 0, если разница дат больше 0. Я думаю, что IIF был представлен с SQL Server 2016. Поэтому, если вы используете более раннюю версию, вам нужно будет использовать оператор CASE вместо функции IIF.

SELECT CASE
           WHEN DATEDIFF(DAY, GETDATE(), DATEADD(DAY, 3, @EventStatusDate)) > 0 THEN
               0
           ELSE
               DATEDIFF(DAY, GETDATE(), DATEADD(DAY, 3, @EventStatusDate))
       END AS BackloggedDaysWithGrace;
...