【问题标题】:find out if date with added interval of days lies in week找出增加天数的日期是否在周内
【发布时间】:2018-05-13 06:47:26
【问题描述】:

简单来说,我有以下定义:

DECLARE @referenceDate DATETIME
SET @referenceDate = '20171123';
DECLARE @intervalDays INT
SET @intervalDays = 30
DECLARE @weekMonday DATETIME
SET @weekMonday = '20171204';
DECLARE @weekSunday DATETIME
SET @weekSunday = '20171210';

恰好在这些日期发生了一些重要的事情:

@referenceDate
DATEADD(day, 1 * @intervalDays, @referenceDate);
DATEADD(day, 2 * @intervalDays, @referenceDate);
DATEADD(day, 3 * @intervalDays, @referenceDate);

等等。

我想知道这个“重要的事情”是否会(也)在@weekMonday 和@weekSunday 之间的指定周内发生。

我有 SQL Server 版本 11.0.6251.0 标准版,德语本地化。感谢您的帮助。

【问题讨论】:

    标签: tsql date sql-server-2012 intervals


    【解决方案1】:

    我用模找到了这个解决方案:

    IF (DATEDIFF(day, @referenceDate, @weekMonday) % @intervalDays = 0 OR
        DATEDIFF(day, @referenceDate, DATEADD(day, 1, @weekMonday)) % @intervalDays = 0 OR
        DATEDIFF(day, @referenceDate, DATEADD(day, 2, @weekMonday)) % @intervalDays = 0 OR
        DATEDIFF(day, @referenceDate, DATEADD(day, 3, @weekMonday)) % @intervalDays = 0 OR
        DATEDIFF(day, @referenceDate, DATEADD(day, 4, @weekMonday)) % @intervalDays = 0 OR
        DATEDIFF(day, @referenceDate, DATEADD(day, 5, @weekMonday)) % @intervalDays = 0 OR
        DATEDIFF(day, @referenceDate, DATEADD(day, 6, @weekMonday)) % @intervalDays = 0)
       SELECT @monday AS found
    

    也许有人知道如何进一步简化它?谢谢。

    【讨论】:

      【解决方案2】:

      我不清楚你在寻找什么。

      如果在范围内:

      DECLARE @referenceDate DATETIME
      SET @referenceDate = '20171123';
      DECLARE @intervalDays INT
      SET @intervalDays = 30
      DECLARE @weekMonday DATETIME
      SET @weekMonday = '20171204';
      DECLARE @weekSunday DATETIME
      SET @weekSunday = '20171210';
      
      SELECT
          CASE 
              WHEN DATEADD(day, @intervalDays, @referenceDate) BETWEEN @weekMonday AND @weekSunday 
                  THEN @intervalDays
              WHEN DATEADD(day, @intervalDays + 30, @referenceDate) BETWEEN @weekMonday AND @weekSunday 
                  THEN @intervalDays + 30 
              ELSE 0 
          END AS [IsReferenceDatePlusIntervalDaysWithinTheDateRange]
      

      距离范围还有多少天:

      SELECT DATEDIFF(day, @referenceDate, @weekMonday) AS [NumberOfDaysBetweenReferenceDateToWeekMonday]
      

      【讨论】:

      • 第一个代码 sn-p 找出“referenceDate + 30 days”是否在指定的周内。但我还需要找出“referenceDate + 60 days”或“referenceDate + 90 days”等是否在指定的一周内。在我看来,只有循环才有可能,但这是真的吗?
      • 间隔是预定义的,还是任意的?您可以在一个查询中进行多项检查,但您必须能够定义检查。
      • 也许它会像这样以某种方式与模一起工作: DATEDIFF(day, referenceDate, weekMonday) % intervalDays = 0 但我必须检查一周中的每一天......
      • 间隔是为每个referenceDate预定义的,不会改变。
      猜你喜欢
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多