sql-server - 如果未提供日期,则返回最近 6 个月的记录或自提供日期起最近 6 个月的记录
问题描述
我有一个存储过程,如果没有提供日期,它会返回过去 6 个月的所有记录,但我还希望它做的是从提供日期的日期返回过去 6 个月的记录。
如果没有提供日期,则使用下面的代码示例,那么我希望查看 2 月到 7 月的记录。但是,如果在下面的代码中提供了日期,我希望能够查看 8 月到 7 月的记录
DECLARE @IncidentDate DATE = null
DECLARE @EmpCode INT = 6000
SET @IncidentDate = '2018-02-05'
SELECT EmpCode
,BonusDate
,BonusYear
,BonusPeriod
,GradesScore
,Bonus
FROM Bonus B
WHERE B.EmpCode = @EmpCode
AND BonusDate >= DATEADD(MONTH, DATEDIFF(Month, 0, DATEADD(m, -6, current_timestamp)), 0)
解决方案
这里的逻辑似乎是您希望从事件日期(如果不为空)或从现在开始(如果事件日期为空)获取最近 6 个月的记录。所以,我认为我们可以将输入日期合并到现在以获得您想要的行为:
SELECT ...
FROM Bonus B
WHERE B.EmpCode = @EmpCode AND
BonusDate >= DATEADD(month, -6, COALESCE(@IncidentDate, GETDATE()));
如果您希望截止日期实际上是今天的午夜,请使用CONVERT(date, GETDATE())
而不是GETDATE()
.
编辑:如果您只想要六个月的窗口,请使用此WHERE
子句:
WHERE B.EmpCode = @EmpCode AND
BonusDate BETWEEN DATEADD(month, -6, COALESCE(@IncidentDate, GETDATE())) AND
COALESCE(@IncidentDate, GETDATE())
推荐阅读
- excel - 创建 SUMIFS 公式以获得 Col"B" 的总和
- reactjs - 从基于 MUI 的自定义库导入组件时使用单个 StylesContext
- javascript - 如何使用 vue-bootstrap-select 包实现自己的样式
- xpath - 使用 XPath 从参数映射构建 URL 查询字符串
- ios - ld:找不到 -lDownPicker 的库,Xcode 12
- quill - 图像元素中的类/其他自定义属性
- c++ - 使用 make 构建时出错:未定义对 `CEGUI::NullRenderer::create()' 的引用
- macos - 为什么我在终端中收到“错误:无效路径”?
- java - 定义的类不能识别
- javascript - 如何根据条件更改警报字符串?