我想从[Orders]
中选择[Submissiondate]
少于7天的所有记录。选择“7天以下”的所有记录
我完全难住了。这是我执行的查询:
SELECT * FROM [Orders] WHERE ([SubmissionDate] < @SubmissionDate)
不起作用。
我想从[Orders]
中选择[Submissiondate]
少于7天的所有记录。选择“7天以下”的所有记录
我完全难住了。这是我执行的查询:
SELECT * FROM [Orders] WHERE ([SubmissionDate] < @SubmissionDate)
不起作用。
你也可以试试这个DATEDIFF
SELECT * FROM [Orders] WHERE datediff(d,SubmissionDate,GETDATE()) > 7
其中GETDATE()是今天的日期和d
是天差
select datediff(d,'2012/06/23',GETDATE())
应该给你7,因为这是7天前
如果你的意思是你想要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
假设SQL参数@SubmissionDate
是日期(时间)了。您可以使用下面的查询将返回这些[Orders]
内的最近7天提交:
SELECT * FROM [Orders] WHERE ([SubmissionDate] >= DATEADD(DD, -7, DATEADD(dd, 0, DATEDIFF(dd, 0, @SubmissionDate))))
两个重要讲话到该解决方案:
[Orders]
已提交 '今天'(直到查询被执行的时间)。以下代码仅用于获取日期时间的日期“部分”(从其他SO thread中提取)。
DATEADD(dd, 0, DATEDIFF(dd, 0, @SubmissionDate))
关于重置时间部分的好处。但是,如果你认为'@ SubmissionDate'代表当前的日期和时间,那么使用这个参数没有太多意义,是吗?您可以改用'GETDATE()'或'CURRENT_TIMESTAMP'。 –
我的意思是,如果OP *是*使用参数,那么很可能(在我看来)参数表示一个*任意*时间戳,并不总是当前时间戳。 –
@AndriyM是的,我明白你的观点,也许这是作者可以澄清的事情,如果它的目的是'@ SubmissionDate'参数。分配当前日期(和时间)。那么,我总是试图避免在查询中直接使用db-server提供的日期和时间,并始终使用参数,所以我确实感到'@ SubmissionDate'意味着分配当前日期和时间。 –
尝试此
SELECT * FROM [指令] WHERE [submission_date] < NOW() - INTERVAL 7 DAY;
是否有提前?你有没有得到解决方案? –