在SQL Server中,尝试为清单目的编写一个年龄报告。每周,库存系统标记数千行以供删除。这将在星期日@ 06:00:00进行,作为每周SQL DB清除计划的一部分。
对closed_time使用(yyyy-mm-dd hh:mm:ss:ms)格式,如何计算该日期到当周下周日之间的天数?更详细的是,有没有办法将其缩小到精确的DD:HH:MM?问题是每个客户端的周日数据库清除时间表各不相同。所以这可能很难计算。可能更容易计算整天直到周日00:00:00。我尝试使用DATEDIFF功能但没有成功。
SELECT
Yada
DATEDIFF(DAY, closed_time,DW) AS Days_Until_Purged
FROM DB1
WHERE closed_time DESC
提前谢谢
答案 0 :(得分:1)
如果您选择过去的任何星期日(例如06:00 Sunday 2nd January 2000
),您可以计算自那时起GONE BY的时间。
然后,如果你接受并做modulo 7-days
,那么你将获得自最近一个星期天以来所经历的时间。
然后,如果你做7 - time_gone_by_since_last_sunday
,你会得到下一个星期天的时间。
我将在几分钟内完成此操作,以应对设置为06:30
的客户。
DECLARE
@batch_processing_time SMALLDATETIME
SET
@batch_processing_time = '2000-01-02 06:00'
SELECT
(60*24*7) - DATEDIFF(minute, @batch_processing_time, closed_time) % (60*24*7)
FROM
yourTable
这是从每条记录closed_time
到下一个@batch_processing_time
的分钟数。
除以(24 * 60)以获得它。
答案 1 :(得分:0)
试试这个:
select 8-DATEpart(w, closed_time) AS Days_Until_Purged from DB1 ...
答案 2 :(得分:0)
这应该可以解决您的问题
SET DATEFIRST 1
Select DATEDIFF(dd,GETDATE(),DATEADD(DAY , 7-DATEPART(WEEKDAY,GETDATE()),GETDATE()))