2013-10-17 74 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

希望这有助于