#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