#sql #sql-server #datediff
Вопрос:
Я пытаюсь рассчитать день инвентаризации с течением времени. У меня проблема с получением фактической суммы дневных запасов за последний месяц. Так что, что касается первой строки, 9 дней-это правильно. Однако во второй строке должно быть указано 34. Так как я хочу рассчитать дни между Inv_date и «сегодняшней» датой. Давайте предположим, что, когда я пишу это, сегодняшняя дата — «2021-03-25».
Итак, у меня есть таблица, такая как:
Перенести | Inv_Date | Дата покупки | Вторые дни |
---|---|---|---|
2021-02-01 00:00:00.000 | 20210219 | Нулевой | 9 |
2021-03-01 00:00:00.000 | 20210219 | Нулевой | 40 |
Чего я ожидаю, так это:
Перенести | Inv_Date | Дата покупки | Вторые дни |
---|---|---|---|
2021-02-01 00:00:00.000 | 20210219 | Нулевой | 9 |
2021-03-01 00:00:00.000 | 20210219 | Нулевой | 34 |
Мой Sql-скрипт для расчета InvdDays:
case when left(Getdate(),8) >= left(convert(varchar,Transdate,112),8) then
datediff(day,Inv_date,
dateadd(day,-1,dateadd(month,1,Transdate))
)
else
isnull(ABS(DATEDIFF(day, Inv_date, isnull(Purch_Date, Getdate()))),0) end as InvDaysStandQty
Комментарии:
1. Пожалуйста, объясните логику.
Ответ №1:
Хммм … Я предполагаю, что вам нужно количество дней с последнего дня transdate
и . inv_date
Это было бы что-то вроде этого:
select datediff(day, inv_date,
(case when convert(date, getdate()) < eomonth(transdate)
then getdate() else eomonth(transdate)
end)
)
Возможно, произошла ошибка с точностью до 1, потому что вы на самом деле не объяснили логику.
Комментарии:
1. Я обновил свой вопрос, так что для первой строки 9 дней верны. Однако во второй строке должно быть указано 34. Так как я хочу рассчитать дни между Inv_date и «сегодняшней» датой. Так как дата покупки всегда будет равна нулю.
2. @user3052850 . . . Дата покупки в этой логике не используется. Я думаю, это делает то, что ты хочешь.