是否可以动态设置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.
我将在视图中使用它,所以我不相信可以声明和使用变量,因此我正在寻找其他选项。
答案 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');