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');
是否可以使 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');