选择所有比7天更“年轻”的记录

时间:2012-06-30 18:45:04

标签: sql select date-range

我想从[Orders]中选择[Submissiondate]少于7天的所有记录。

我完全难过了。这是我正在执行的查询:

SELECT * FROM [Orders] WHERE ([SubmissionDate] < @SubmissionDate)

不起作用。

4 个答案:

答案 0 :(得分:5)

如果您的意思是希望SubmissionDate@SubmissionDate之间的@SubmissionDate - 7 days行,那么我将在Transact-SQL中实现这一点:

WHERE [SubmissionDate] BETWEEN DATEADD(DAY, -7, @SubmissionDate)
                           AND @SubmissionDate

请注意,BETWEEN隐含>=<=。如果你需要严格的不等式,那就这样:

WHERE [SubmissionDate] > DATEADD(DAY, -7, @SubmissionDate)
  AND [SubmissionDate] < @SubmissionDate

答案 1 :(得分:1)

假设sql参数@SubmissionDate现在是日期(和时间)。您可以使用以下查询返回过去7天内提交的[Orders]

SELECT * FROM [Orders] WHERE ([SubmissionDate] >= DATEADD(DD, -7, DATEADD(dd, 0, DATEDIFF(dd, 0, @SubmissionDate))))

对此解决方案的两个重要评论:

  1. 时间'部分'正在从@SubmissionDate中删除。
  2. 由于没有“日期至”限制,请包含提交的[Orders] '今天​​'(直到查询执行的时间)。
  3. 以下代码仅用于获取日期时间的“部分”日期(从其他SO thread中提取)。

    DATEADD(dd, 0, DATEDIFF(dd, 0, @SubmissionDate))
    

答案 2 :(得分:0)

您也可以尝试此DATEDIFF

SELECT * FROM [Orders] WHERE  datediff(d,SubmissionDate,GETDATE()) > 7

其中GetDate()是今天的日期,而d是天数的差异

select datediff(d,'2012/06/23',GETDATE())

应该给你7因为它是7天前

答案 3 :(得分:0)

试试这个

  

SELECT * FROM [Orders] WHERE [submission_date]&lt;现在() - INTERVAL 7   DAY;

相关问题