我有一个包含事件信息的数据库,包括日期(MMDDYYYY格式)。是否可以编写SQL Server语句以仅获取落在特定时间范围内的行?
像这样的伪陈述:
SELECT * FROM events WHERE [current_date minus date <= 31] ORDER BY date ASC
其中date
是SQL Server行中的日期,current_date
是今天的日期。 31
是几天,所以基本上是一个月的时间。
我可以在通用语句(阅读:SELECT * FROM events ORDER BY date ASC
)之后轻松处理数据,但它会“很酷”(就像在我学习新的东西:P),知道这是否可行。
答案 0 :(得分:4)
SELECT * FROM events WHERE date&gt; getdate() - 31 ORDER BY date ASC
答案 1 :(得分:2)
使用DateDiff:
SELECT * FROM events WHERE DATEDIFF(day,date,getdate())&lt; 31订购日期ASC
答案 2 :(得分:2)
DECLARE @start_date datetime
SET @start_date = DATEADD(day, -31, getdate())
SELECT * FROM events WHERE date BETWEEN @start_date AND getdate()
答案 3 :(得分:1)
为获得最佳性能,请勿在表达式中使用函数。首先计算阈值日期(在您的客户端或存储过程中),然后使用
SELECT ... WHERE [date]&gt; {把阈值放在这里}
答案 4 :(得分:0)
DateDiff和GetDate()应该排除你。
示例:
SELECT * FROM events WHERE DATEDIFF(day, date, GETDATE()) <= 31 ORDER BY date ASC
答案 5 :(得分:0)
您可以使用DATEDIFF
功能。
噢噢,Ninja在查看时确保我不是胡说八道! :)
答案 6 :(得分:0)
此外:
SELECT * FROM events WHERE current_date BETWEEN dateadd(day,-31,getdate()) AND getdate() ORDER BY date ASC
虽然真正的BETWEEN是令人厌恶的
答案 7 :(得分:0)
使用GetDate()返回当前日期。
在几天内加或减。
一个例子是:
SELECT *
FROM MY_TABLE T
WHERE T.SOME_DATE BETWEEN (GetDate()-31) AND GetDate()