2012-06-30 22 views
5

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

我完全难住了。这是我执行的查询:

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

不起作用。

+0

是否有提前?你有没有得到解决方案? –

回答

0

你也可以试试这个DATEDIFF

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

其中GETDATE()是今天的日期和d是天差

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

应该给你7,因为这是7天前

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

假设SQL参数@SubmissionDate是日期(时间)了。您可以使用下面的查询将返回这些[Orders]内的最近7天提交:

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

两个重要讲话到该解决方案:

  1. 时间“部分”被从去除@SubmissionDate 。
  2. 因为没有'日期到'限制,所以包括[Orders]已提交 '今天'(直到查询被执行的时间)。

以下代码仅用于获取日期时间的日期“部分”(从其他SO thread中提取)。

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

关于重置时间部分的好处。但是,如果你认为'@ SubmissionDate'代表当前的日期和时间,那么使用这个参数没有太多意义,是吗?您可以改用'GETDATE()'或'CURRENT_TIMESTAMP'。 –

+0

我的意思是,如果OP *是*使用参数,那么很可能(在我看来)参数表示一个*任意*时间戳,并不总是当前时间戳。 –

+0

@AndriyM是的,我明白你的观点,也许这是作者可以澄清的事情,如果它的目的是'@ SubmissionDate'参数。分配当前日期(和时间)。那么,我总是试图避免在查询中直接使用db-server提供的日期和时间,并始终使用参数,所以我确实感到'@ SubmissionDate'意味着分配当前日期和时间。 –

0

尝试此

SELECT * FROM [指令] WHERE [submission_date] < NOW() - INTERVAL 7 DAY;