Как рассчитать оставшиеся дни, используя DATEDIFF - PullRequest
0 голосов
/ 01 июля 2018

Я написал базовый запрос для отображения всех проектов, сроков выполнения и статуса завершения, но я хочу расширить свой запрос, чтобы отобразить дни до завершения, которые должны отображать оставшиеся дни до выполнения для каждого незавершенного проекта. Как я могу использовать функцию DATEDIFF для достижения желаемого результата?

Могу ли я использовать

=IIF(DATEDIFF(duedate.Day, Fields!Created.Value, Today) < 30, 1, 0)

Выход:

id  name    duedate     today   
---------------------------------------------------------------
1   Alpha   2040-01-01  2018-07-01T01:49:43.943Z    Incomplete
2   Bravo   2030-03-01  2018-07-01T01:49:43.943Z    Incomplete
3   Charlie 2017-02-01  2018-07-01T01:49:43.943Z    Complete
4   Delta   2017-04-01  2018-07-01T01:49:43.943Z    Complete

Мой текущий запрос:

SELECT 
    id, name, duedate, GETDATE() AS today,
    CASE 
       WHEN duedate <= CURRENT_TIMESTAMP THEN 'Complete'
       WHEN duedate >= CURRENT_TIMESTAMP THEN 'Incomplete'
    END
FROM 
    Project
ORDER BY 
    Project.name ASC;

Желаемый результат:

id  name    duedate     today                       Status      daystocomp
--------------------------------------------------------------------------
1   Alpha   2040-01-01  2018-07-01T01:49:43.943Z    Incomplete  8030 or 22y1m1d
2   Bravo   2030-03-01  2018-07-01T01:49:43.943Z    Incomplete  4380 or 12y1m1d
3   Charlie 2017-02-01  2018-07-01T01:49:43.943Z    Complete    0
4   Delta   2017-04-01  2018-07-01T01:49:43.943Z    Complete    0

1 Ответ

0 голосов
/ 01 июля 2018

Да, вы можете использовать datediff():

SELECT id, name, duedate, GETDATE() AS today,
       (CASE WHEN duedate <= CURRENT_TIMESTAMP THEN 'Complete'
             WHEN duedate > CURRENT_TIMESTAMP THEN 'Incomplete'
        END),
       (CASE WHEN duedate > CURRENT_TIMESTAMP
             THEN DATEDIFF(day, CURRENT_TIMESTAMP, duedate)
        END) as daystocomp
FROM Project
ORDER BY Project.name asc;
...