2012-06-12 82 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) 
相關問題