0

我有一个包含事件信息的数据库,包括日期(MMDDYYYY 格式)。是否可以编写 SQL Server 语句来仅获取特定时间范围内的行?

类似这样的伪语句:

SELECT * FROM events WHERE [current_date minus date <= 31] ORDER BY date ASC

wheredate是 SQL Server 行中的日期,并且current_date是今天的日期。是31几天,所以基本上是一个月的时间。

我可以在通用语句(阅读:)之后轻松处理数据SELECT * FROM events ORDER BY date ASC,但是知道这是否可能会很“酷”(就像我学习新东西一样:P)。

4

8 回答 8

4

SELECT * FROM events WHERE date > getdate() - 31 ORDER BY date ASC

于 2009-02-09T21:30:09.410 回答
2

使用 DateDiff:

SELECT * FROM events WHERE DATEDIFF(day, date, getdate()) < 31 ORDER BY date ASC

http://msdn.microsoft.com/en-us/library/ms189794.aspx

于 2009-02-09T21:29:47.260 回答
2
DECLARE @start_date datetime
SET @start_date = DATEADD(day, -31, getdate())
SELECT * FROM events WHERE date BETWEEN @start_date AND getdate()
于 2009-02-09T21:33:14.507 回答
1

为获得最佳性能,请勿在表达式中使用函数。首先计算阈值日期(在您的客户端或存储过程中),然后使用

SELECT ... WHERE [日期] > {将阈值放在这里}

于 2009-02-09T21:33:30.760 回答
0

DateDiff和 GetDate() 应该可以解决您的问题。

例子:

SELECT * FROM events WHERE DATEDIFF(day, date, GETDATE()) <= 31 ORDER BY date ASC
于 2009-02-09T21:28:11.117 回答
0

您可能可以使用该DATEDIFF功能。

D'oh,Ninja'd 查了一下,以确保我没有在胡说八道!:)

于 2009-02-09T21:31:12.887 回答
0

还:

选择 *
从事件
在 dateadd(day,-31,getdate()) 和 getdate() 之间的 current_date
按日期排序 ASC

虽然真的 BETWEEN 是可憎的

于 2009-02-09T21:31:58.720 回答
0

使用 GetDate() 返回当前日期。

以天为单位增加或减少。

一个例子是:

SELECT *
FROM MY_TABLE T
WHERE T.SOME_DATE BETWEEN (GetDate()-31) AND GetDate()
于 2009-02-09T21:32:00.843 回答