返回日期和时间范围

当你分析表中的数据时，你也许希望取出某个特定时间的数据。你也许对特定的某一天中――比如说2000年12月25日――访问者在你站点上的活动感兴趣。要取出这种类型的数据，你也许会试图使用这样的SELECT语句：

SELECT * FROM weblog WHERE entrydate=

”12/25/20000”

不要这样做。这个SELECT语句不会返回正确的记录――它将只返回日期和时间是12/25/2000 12:00:00:000AM的记录。换句话说，只有刚好在午夜零点输入的记录才被返回。

注意

在本节的讨论中，假设字段entrydate是DATETIME型，而不是SMALLDATETIME型。本节的讨论对SMALLDATETIME型字段也是适用的，不过SMALLDATETIME型字段只能精确到秒。

问题是SQL Sever将用完整的日期和时间代替部分日期和时间。例如，当你输入一个日期，但不输入时间时，SQL Sever将加上缺省的时间“12：00：00：000AM”。当你输入一个时间，但不输入日期时，SQL Sever将加上缺省的日期“Jan 1 1900”。

要返回正确的记录，你需要适用日期和时间范围。有不止一种途径可以做到这一点。例如，下面的这个SELECT 语句将能返回正确的记录：

SELECT * FROM weblog

WHERE entrydate>=

”12/25/2000” AND entrydate<”12/26/2000”

这个语句可以完成任务，因为它选取的是表中的日期和时间大于等于12/25/2000 12:00:00:000AM并小于12/26/2000 12:00:00:000AM的记录。换句话说，它将正确地返回2000年圣诞节这一天输入的每一条记录。

另一种方法是，你可以使用LIKE来返回正确的记录。通过在日期表达式中包含通配符“％”，你可以匹配一个特定日期的所有时间。这里有一个例子：

SELECT * FROM weblog WHERE entrydate LIKE

‘Dec 25 2000%’

这个语句可以匹配正确的记录。因为通配符“％”代表了任何时间。

使用这两种匹配日期和时间范围的函数，你可以选择某个月，某一天，某一年，某个小时，某一分钟，某一秒，甚至某一毫秒内输入的记录。但是，如果你使用LIKE 来匹配秒或毫秒，你首先需要使用函数CONVERT（）把日期和时间转换为更精确的格式（参见前面“转换日期和时间”一节）。