DATEDIFF - 周日前几天

时间:2014-03-10 14:59:52

标签: sql sql-server datediff

在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

提前谢谢

3 个答案:

答案 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()))