Как получить результаты по конкретным датам (2016-01-01 / 2016-12-31)

#sql #sql-server

Вопрос:

Я создал SQL-запрос, который вычисляет разницу в дате между столбцами на основе года, начиная с сегодняшнего дня. Теперь я пытаюсь получить данные между (2016-01-01/2016-12-31).

Это запрос ниже, который получает дату, основанную на времени года, начиная с сегодняшнего дня. Кто-нибудь может дать мне представление о том, как просто получить работу в промежутке (2016-01-01/2016-12-31)?

 sum(case 
 when ci.docdate#2 >= DATEADD(month, -12, GETDATE())  and ci.docdate#5>= DATEADD(month, -12, GETDATE()) and ci.docdate#5 <= getdate() then (DATEDIFF(day,ci.docdate#2,ci.docdate#5)-(DATEDIFF(week,ci.docdate#2,ci.docdate#5)*2)) 1-(CASE WHEN DATENAME(weekday, ci.docdate#2) = 'Sunday' THEN 1 ELSE 0 END)
        - (CASE WHEN DATENAME(weekday, ci.docdate#2) = 'Saturday' THEN 1 ELSE 0 END)
 when ci.docdate#2 >= DATEADD(month, -12, GETDATE())   and (ci.docdate#5 > getdate() or year(ci.docdate#5) <2000) then (DATEDIFF(day,ci.docdate#2,getdate())-(DATEDIFF(week,ci.docdate#2,getdate())*2)) 1-(CASE WHEN DATENAME(weekday, ci.docdate#2) = 'Sunday' THEN 1 ELSE 0 END)
        - (CASE WHEN DATENAME(weekday, ci.docdate#2) = 'Saturday' THEN 1 ELSE 0 END)
 when ci.docdate#2 < DATEADD(month, -12, GETDATE())  and  ci.docdate#5>= DATEADD(month, -12, GETDATE()) and ci.docdate#5 <= getdate()  then (DATEDIFF(day,DATEADD(month, -12, GETDATE()),ci.docdate#5)-(DATEDIFF(week,DATEADD(month, -12, GETDATE()),ci.docdate#5)*2)) 1 - (CASE WHEN DATENAME(weekday, DATEADD(month, -12, GETDATE())) = 'Sunday' THEN 1 ELSE 0 END)
        - (CASE WHEN DATENAME(weekday, '2020-01-01') = 'Saturday' THEN 1 ELSE 0 END)
 when ci.docdate#2 < DATEADD(month, -12, GETDATE()) and (ci.docdate#5 > getdate() or year(ci.docdate#5) <2000) then (DATEDIFF(day,DATEADD(month, -12, GETDATE()),getdate())-(DATEDIFF(week,DATEADD(month, -12, GETDATE()),getdate())*2)) 1 - (CASE WHEN DATENAME(weekday, DATEADD(month, -12, GETDATE())) = 'Sunday' THEN 1 ELSE 0 END)
        - (CASE WHEN DATENAME(weekday, '2020-01-01') = 'Saturday' THEN 1 ELSE 0 END)
 when year(ci.docdate#2) < 1900  and  ci.docdate#5 >= DATEADD(month, -12, GETDATE())  then (DATEDIFF(day,ci.deldate,ci.docdate#5)-(DATEDIFF(week,ci.deldate,ci.docdate#5)*2)) 1-(CASE WHEN DATENAME(weekday, ci.deldate) = 'Sunday' THEN 1 ELSE 0 END)
        - (CASE WHEN DATENAME(weekday, ci.deldate) = 'Saturday' THEN 1 ELSE 0 END)
 when year(ci.docdate#2) < 1900  and (ci.docdate#5 > getdate() or year(ci.docdate#5) <2000) then (DATEDIFF(day,ci.deldate,getdate())-(DATEDIFF(week,ci.deldate,getdate())*2)) 1-(CASE WHEN DATENAME(weekday, ci.deldate) = 'Sunday' THEN 1 ELSE 0 END)
        - (CASE WHEN DATENAME(weekday, ci.deldate) = 'Saturday' THEN 1 ELSE 0 END)
 else 0
 end) as DaysonHire
 

Комментарии:

1. Какую СУБД вы используете. DATEDIFF и DATEADD являются функциями, специфичными для продукта.

2. Заменить getdate() на 2016-12-31?

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

4. Студия управления Microsoft SQL Server