sql-server - SQL Server - 从加入的月份和年份获取当前月份的所有月份和年份数字
问题描述
我有员工加入日期,从加入日期到我想打印月份和年份数字。
例如员工在 2020 年 7 月加入,我需要获取如下数据
MonthNumber YearNumber
7 2020
8 2020
9 2020
10 2020
11 2020
12 2020
1 2021
下面是我的查询,我正在使用 CTE 并尝试增加它..
DECLARE @JoiningDate Date
SET @JoiningDate = '2020-07-04 11:21:03.827'
;With MonthYears as (
SELECT monthNumber = DATEPART(m, @JoiningDate),
yearNumber = DATEPART(YEAR, DATEADD(m, i+1, @JoiningDate),
i = 0
UNION ALL
SELECT monthNumber = DATEPART(m, DATEADD(m, i+1, @JoiningDate)),
yearNumber = DATEPART(YEAR, DATEADD(m, i+1, @JoiningDate)),
i = i+1
FROM MonthYears
WHERE DATEPART(m, DATEADD(m, i+1, @JoiningDate)) <= DATEPART(m, GETDATE())
AND DATEPART(year, DATEADD(m, i+1, @JoiningDate)) <= DATEPART(year, GETDATE())
)
SELECT * FROM MonthYears
但是我只能看到1条记录,即加入的月份和年份,即2020年7月
解决方案
您的查询的问题是WHERE
条件
WHERE DATEPART(m, DATEADD(m, i+1, @JoiningDate)) <= DATEPART(m, GETDATE())
AND DATEPART(year, DATEADD(m, i+1, @JoiningDate)) <= DATEPART(year, GETDATE())
在第二次迭代中,Aug - 8
不小于DATEPART(m, GETDATE()) = 1
我会使用当月的第一天,并在递归 CTE 中增加 1 个月。然后DATEPART()
在结果上使用
DECLARE @JoiningDate Date
SET @JoiningDate = '2020-07-04 11:21:03.827'
;With MonthYears as
(
SELECT [FirstOfMonth] = DATEADD(MONTH, DATEDIFF(MONTH, 0, @JoiningDate), 0)
UNION ALL
SELECT [FirstOfMonth] = DATEADD(MONTH, 1, [FirstOfMonth])
FROM MonthYears
WHERE [FirstOfMonth] < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)
)
SELECT *,
monthNumber = DATEPART(month, [FirstOfMonth]),
yearNumber = DATEPART(YEAR, [FirstOfMonth])
FROM MonthYears
推荐阅读
- sql-server - Crystal Reports 可以访问表,但不能访问视图
- javascript - 使用 JavaScript 在对象内嵌套一个数组
- c++ - 多项式系数代码始终提供相同的答案
- windows-10 - 在 Windows 10 中捕获屏幕锁定/解锁事件
- flutter - 如何在颤动中创建水平和垂直可滚动的小部件
- python - 如何获取代码以启动它创建的 txt?
- prolog - prolog图深度优先搜索
- java - Spring OAuth2 Rest 异常吞下 HttpResponse 代码
- html - Flexbox 无法使 Woocommerce 按钮居中
- html - 如何确定哪些 html 元素正在使用字体?