0

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

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

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

4

2 回答 2

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))
于 2012-06-12T10:56:14.967 回答
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)
于 2012-06-12T11:08:37.847 回答