【问题标题】:DATEDIFF - How many days until SundayDATEDIFF - 距离星期日还有多少天
【发布时间】:2014-04-13 18:21:33
【问题描述】:

在 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

提前谢谢

【问题讨论】:

  • 这表示MS SQL Server,但也标记为MySQL(有非常不同的日期时间函数)

标签: sql sql-server datediff


【解决方案1】:

试试这个:

select 8-DATEpart(w, closed_time) AS Days_Until_Purged from DB1 ...

【讨论】:

  • 在使用DATEPART 时,请务必提及服务器上DATEFIRST 设置的重要性。
【解决方案2】:

这应该可以解决您的问题

SET DATEFIRST 1
Select DATEDIFF(dd,GETDATE(),DATEADD(DAY , 7-DATEPART(WEEKDAY,GETDATE()),GETDATE()))

【讨论】:

    【解决方案3】:

    如果您选择过去的任何一个星期日(如06:00 Sunday 2nd January 2000),您可以计算从那时起已经过去的时间。

    然后,如果你接受它并执行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) 得到天数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 2021-11-20
      • 2022-11-17
      相关资源
      最近更新 更多