日期范围基于列日期

时间:2017-05-02 18:04:57

标签: sql-server date dateadd

我正在使用最新的SQL Server。我有一个带CreatedDate列的表。我需要编写一个Query,它使用CreatedDate中Date的正负7。我不知道如何解决这个问题。我的想法是:

func_value

这个问题是我不能使用" CreatedDate"作为SET @DATE,因为SQL会出现错误"无效的列名称' CreatedDate'"

任何帮助将不胜感激。我无法列出日期,因为该列中的每个日期都可能不同。

由于

1 个答案:

答案 0 :(得分:2)

在这种情况下,你需要不再像程序员那样思考,并开始像数据库程序员那样思考。

让我们只使用查询的中心部分:

SELECT *
FROM <table>
WHERE <table> BETWEEN @SevenBefore AND @SevenAfter

现在,您说CreatedDate是表中的一列。对于此示例,我将假设CreatedDate位于上述示例中的表之外的表中。为此,我将在表格中给出两个假名。使用CreatedDate的表格,我将调用tblCreated,上面的查询中的一个我将调用tblData。

综上所述,很明显您无法将整个表格行与日期进行比较。该表中必须有一个包含日期/时间值的字段。我将此专栏称为TargetDate

鉴于这些假设,您的查询将类似于:

SELECT *
FROM tblCreated tc
INNER JOIN tblData td
    ON td.TargetDate BETWEEN DATEADD(day, -7, tc.CreatedDate) and DATEADD(day, 7, tc.CreatedDate)

看看这个,很明显你还需要表之间的其他关联。您是否只希望每个客户的所有数据行都基于创建日期,或者可能只希望Creations在其中完成某些工作,如数据记录中所示,或者??。如果没有更全面的规范,我们无法帮助解决这个问题。