SQL开始日期是当前日期,结束日期是1个月前,即使它不是从该月的第一个到最后一个

时间:2010-09-20 14:27:29

标签: sql sql-server sql-server-2005

好的我正在尝试编写一个查询,说明获取当前日期并将其作为开始日期。然后我想从EndDate的当前日期返回一个月。是否有可能做到这一点?就像它是9-15-2010作为开始日期我可以从那个月回到8-15-2010或者这是不可能的....你会做什么像9-20-2010作为开始日期,因为每个月都有不同的天数?否则如果不可能,我怎么办呢?该报告将始终在每月25日运行,所以任何想法?我需要从25个月开始一个月......如果需要,我可以在几个月之间得到一些重复的记录但是显然更好

现在我正在使用它:

DECLARE @StartDate DATETIME,
 @EndDate DATETIME;

SET @StartDate = DATEADD(m,-1,GETDATE());
SET @EndDate = DATEADD(m, 1, @StartDate);

这有用吗?

另外,我怎么说我的AuditInsertTimestamp介于@Start和@EndDate之间?

目前我有这个:

AND cvn.[AuditInsertTimestamp] BETWEEN @StartDate AND @EndDate ;

这仍然给我一些像7-26-2010的日期......

谢谢!

2 个答案:

答案 0 :(得分:2)

should work.你试过吗?

如果它不起作用(并且只有12个测试用例来检查您是否不信任该文档),那么您可以从date parts重新构建日期。

这是问题所在。它应该是这样的:

cvn.[Subject] = 'Field Changed (Plate Type)'
    AND (
        cvn.[Note] LIKE 'Old Type: IRP%New Type: BASE PLATE%'
        OR cvn.[Note] LIKE 'Old Type: Base Plate%New Type: IRP%'
    )
    AND cvn.AuditInsertTimestamp BETWEEN GETDATE() AND DATEADD(MONTH, -1, GETDATE()) 

AND对OR进行预测,因此您使用旧类型:IRP或正确的日期范围(使用旧类型:基板)拾取任何内容

答案 1 :(得分:0)

根据您的评论:

  

这是用来选择的   记录。所以如果我在25日运行它我   需要30天回到我的领域   AuditInsertTimestamp需要   在这两个日期之间。

我认为你需要做这样的事情:

SELECT * FROM Table
WHERE AuditInsertTimestamp BETWEEN GETDATE() AND DATEADD(MONTH, -1, GETDATE())