sql - WHERE 子句中的动态日期取决于当前日期
问题描述
是否可以使WHERE
子句中的日期成为动态的,以便如果当前日期(GETDATE()
?)小于当年(何时GETDATE()
运行)的 7 月 1 日(7/1),则使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.
我将在视图中使用它,所以我不相信我可以声明和使用变量,所以我正在寻找其他选项。
解决方案
一种没有 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');
推荐阅读
- java - 如何在循环中增加变量以将对象移动一定数量的点并旋转到新方向
- c# - UNITY - UnauthorizedAccessException:访问路径被拒绝
- typescript - TypeScript:无法在子类上调用超级方法
- javascript - 蒸汽网络 API。是否可以在 Vue.js 中获取本地主机上的数据?
- powerbi - 设计事实表
- java - 尝试从空数组android读取
- elasticsearch - p:datatable 分页所有条目弹性搜索索引
- html - 图片未加载到网页上
- javascript - 如何在节点列表上使用带有 for 循环的 match() 方法
- laravel - 如何修复“未捕获的 ReferenceError:Vue 未在 vuetemplatetest.2.html:19 中定义”