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

Sql 如何从自定义日期范围中查找当前月份和年份?,sql,sql-server-2008,sql-server-2005,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日的月数。如果我想知道当月加入的员工,通常我可以使用sql查找

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

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

在这个例子中,这个月的时间段被认为是从上个月的21日到本月的20日,这个时间段的员工被认为是这个月的员工(所有在2012-05-21之后到2012-06-20(包括2012-06-20))来公司的人)。试试看:

选择加入日期,
DATEADD(DAY,20,DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())-1,0))周期开始,
DATEADD(天,19,DATEADD(月,DATEDIFF(月,0,GETDATE()),0))周期结束
来自tblEmployeeMaster
其中DateOfJoin>DATEADD(天,20,DATEADD(月,DATEDIFF(月,0,GETDATE())-1,0))
及
DateOfJoining
哪个自定义日期范围?非常感谢伊万先生,还有一件事,如果DateOfJoining包含日期和时间,例如'2012-06-20 13:00:00',并且您希望员工当天到达,则条件应更改为:WHERE DateOfJoining>DATEADD(day,20,DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE())-1,0))和dateofjoinSELECT 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))
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)