2012-06-12 84 views
0

我有关于自定义日期范围的问题。让我来解释一下,从当月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)) 
+0

非常感谢您先生Ivan__83 – Nayeem

+0

我很高兴能帮到您:) –

+0

还有一件事,如果DateOfJoining包含日期和时间一起,例如'2012-06-20 13:00:00',您希望员工谁进来那一天,WHERE条件应改为:\t WHERE DateOfJoining> DATEADD(DAY,20,DATEADD(月,DATEDIFF(MONTH,0,GETDATE()) - 1,0)) \t \t \t和 \t \t \t DateOfJoining

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) 
相关问题