如何做条件SQL Server语句?

时间:2009-02-09 21:25:58

标签: sql sql-server tsql datetime query-help

我有一个包含事件信息的数据库,包括日期(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),知道这是否可行。

8 个答案:

答案 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

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

答案 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()