0

每个月我都会运行以下查询

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

我想将它添加为作业(来自 SQL Server 代理)以在每月的第二天运行。是否可以自动更改

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

B.RemDate between '1stday_of_previous_month' and '1st_day_of_current_month'
4

2 回答 2

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()) 
于 2013-10-17T14:30:02.150 回答
0

你可以试试这个方法

要获取前一个月的第一天,请选择 GETDATE(), DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0)

要获取当月的第一天,请选择 GETDATE(), DATEADD(MONTH, DATEDIFF(MONTH, 0, '2013-06-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)

我使用了这个主题->如何在 SQL Server 中获取上个月的第一天和最后一天(带有时间戳)

希望这可以帮助

于 2013-10-17T14:34:24.710 回答