2013-10-17 73 views
0

我每個月運行下面的查詢SQL動態變化的日期時間

select A.a,  
from A 
inner join B on ..... 
where B.RemDate between '2013/09/01' and '2013/10/01' 

我想將其添加爲工作(從SQL Server代理)運行在每月的第2天。 是否可以自動改變

B.RemDate between '2013/09/01' and '2013/10/01' 

B.RemDate between '1stday_of_previous_month' and '1st_day_of_current_month' 
+0

http://stackoverflow.com/questions/15144964/how-to-get-the-first-day-and-the-last-of-previous-month-using-sql – Andrew

+0

什麼版本SQL Server的使用?如果2012年 - 有一個函數['EOMONTH()'](http://technet.microsoft.com/en-us/library/hh213020.aspx)獲取月份的最後一天,並輕鬆使用它獲得第一個也(DATEADD -1)。如果沒有檢查其他答案。 –

回答

0

創建像

ALTER FUNCTION [dbo].[fnFirstDayOfMonth] 
    (@date AS DATETIME) 
RETURNS DATETIME 
AS 
BEGIN 
    DECLARE @d AS DATETIME 
    SET @d = (DATEADD(dd, -(DAY(@date)-1), @date)) 
    RETURN CAST(@d AS DATE) 
END 

然後

select A.a,  
from A 
inner join B on ..... 
where B.RemDate between dateadd(M,-1,dbo.fnFirstDayOfMonth(getdate())) 
        and dbo.fnFirstDayOfMonth(getdate()) 
0

功能你可以試試這個方法

要獲得previos月的第一天 選擇GETDATE(),DATEADD(月,DATEDIFF(MONTH,0,GETDATE()) - 1,0)

爲了得到當前的第一天一個月 選擇GETDATE(),DATEADD(月,DATEDIFF(MONTH,0, '2013年6月10日'),0)

有您所查詢的

select A.a,  
from A 
inner join B on ..... 
where B.RemDate between DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) and DATEADD(MONTH, DATEDIFF(MONTH, 0, '2013-06-10'), 0) 

我用這個主題 - >How to get first and last day of previous month (with timestamp) in SQL Server

希望這有助於