我对自定义日期范围有疑问。让我解释一下,对于我们公司从当月21日到下个月第20天的月数。如果我想知道哪个员工加入当月,那么通常我可以找到使用sql
SELECT *
FROM tblEmployeeMaster
--CURRENT MONTH
WHERE MONTH(DateOfJoining)=MONTH(GETDATE()) AND YEAR(DateOfJoining)=YEAR(GETDATE())
但是对于这个自定义日期范围,我找不到本月加入的员工。例如,在这个系统中,如果我想查找本月加入的员工列表,那么结果将显示在第21天到当月第20天之后加入上个月的员工。有人可以帮助我吗?
答案 0 :(得分:1)
在这个例子中,本月的期间被认为是从上个月的21个月到当月的20个月,那个时期的员工被认为是本月的员工(所有在2012-05-21之后来到公司的人员2012-06-20(包括2012-06-20))。试试吧:
SELECT DateOfJoining,
DATEADD(DAY, 20, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)) PeriodStart,
DATEADD(DAY, 19, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0)) PeriodEnd
FROM tblEmployeeMaster
WHERE DateOfJoining > DATEADD(DAY, 20, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0))
AND
DateOfJoining < DATEADD(DAY, 20, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0))
答案 1 :(得分:0)
SELECT *
FROM tblEmployeeMaster
WHERE DateOfJoining BETWEEN CAST(CAST(YEAR(GETDATE()) AS VARCHAR) +'-'+ CAST(MONTH(GETDATE()) AS VARCHAR) +'-21' AS DATETIME)
AND CAST(CAST(YEAR(DATEADD(month,1,GETDATE())) AS VARCHAR) +'-'+ CAST(MONTH(DATEADD(month,1,GETDATE())) AS VARCHAR) +'-20' AS DATETIME)