如何从自定义日期范围中查找当前月份和年份?

时间:2012-06-12 10:39:39

标签: sql sql-server-2008 sql-server-2005

我对自定义日期范围有疑问。让我解释一下,对于我们公司从当月21日到下个月第20天的月数。如果我想知道哪个员工加入当月,那么通常我可以找到使用sql

SELECT *
  FROM tblEmployeeMaster
  --CURRENT MONTH
  WHERE MONTH(DateOfJoining)=MONTH(GETDATE())  AND YEAR(DateOfJoining)=YEAR(GETDATE())

但是对于这个自定义日期范围,我找不到本月加入的员工。例如,在这个系统中,如果我想查找本月加入的员工列表,那么结果将显示在第21天到当月第20天之后加入上个月的员工。有人可以帮助我吗?

2 个答案:

答案 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)