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

时间:2019-04-17 15:24:59

标签: sql sql-server sql-server-2014

是否可以动态设置WHERE子句中的日期,以便如果当前日期(GETDATE()?)小于小于 7月1日(7/1)当前年份(运行GETDATE()的日期),然后将WHERE子句中的日期设置为上一年年的7/1。如果当前日期大于当前年份的7/1,则将WHERE子句中的日期设为当前年份的7/1。这是一些示例。

   --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.

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

1 个答案:

答案 0 :(得分:1)

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

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

这会从当前日期(DATEADD(month, -6, GETDATE())中减去6个月,仅占用该新日期的年份(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');