【问题标题】:SQL Dynamically datetime change [duplicate]SQL动态日期时间更改[重复]
【发布时间】:2013-10-17 22:34:24
【问题描述】:

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

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'

【问题讨论】:

  • 您使用的是什么版本的 SQL Server?如果是 2012 年 - 有一个函数 EOMONTH() 可以获取月份的最后一天并轻松使用它来获取第一天(DATEADD -1)。如果没有,请检查其他答案。

标签: sql sql-server date


【解决方案1】:

创建一个类似的函数

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()) 

【讨论】:

    【解决方案2】:

    你可以试试这个方法

    获取上个月的第一天 选择 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)
    

    我用过这个话题->How to get first and last day of previous month (with timestamp) in SQL Server

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      相关资源
      最近更新 更多