WHERE 子句中的动态日期取决于当前日期

Dynamic date in WHERE clause dependent on current date

是否可以使 WHERE 子句中的日期动态化,以便当前日期 (GETDATE() ?) 小于 7 月 1 日当前年份的 (7/1)(当 GETDATE() 为 运行 时)然后使 WHERE 子句中的日期为 previous[= 的 7/1 24=]年。如果当前日期 大于 当前年份的 7/1,则使 WHERE 子句中的日期为 当前 [= 的 7/1 24=]年。这里有几个例子。

   --EXAMPLE 1:
        GETDATE() = 4/17/19

        SELECT A.DATE
        FROM TEST_TABLE A
        WHERE A.DATE >'2018-07-01'  <-- This would be dynamic based on the current date being less than 7/1 of this year, so use previous year.

   --EXAMPLE 2:

       GETDATE() = 7/2/19

       SELECT A.DATE
       FROM TEST_TABLE A
       WHERE A.DATE > '2019-07-01' <-- 2019 Because current date is greater than 7/1 of current year we use the current year.

我将在视图中使用它,所以我不相信我可以声明和使用变量,所以我正在寻找其他选项。

一种不使用 case/else 语句的方法:

CONCAT(Year(DATEADD(month, -6, GETDATE())), '/07/01')

这从当前日期减去 6 个月 (DATEADD(month, -6, GETDATE())),只取新日期的年份 (Year(...)) 并在末尾附加 /07/01 (CONCAT(..., '/07/01')).

示例:

SELECT CONCAT(Year(DATEADD(month, -6, '2017/06/30')), '/07/01'); 产出 2016/07/01

SELECT CONCAT(Year(DATEADD(month, -6, '2017/07/01')), '/07/01'); 输出 2017/07/01

上下文中使用:

SELECT A.DATE
       FROM TEST_TABLE A
       WHERE A.DATE > CONCAT(Year(DATEADD(month, -6, GETDATE())), '/07/01');