0

在我的 asp.net 项目中,我使用 SQLDataSource 连接到数据库,我想使用过去 7 天的 DateTime 字段(PublishDate)过滤行

(所以我看到 PublishDate 大于 DateTime.Now - 7 天的书籍)

你可以在屏幕截图中看到我到目前为止所拥有的

如何在查询中执行此操作(不使用代码来遍历行并比较日期时间)?

在此处输入图像描述

4

6 回答 6

1

添加以下 WHERE 子句

WHERE Books.PublishedDate > DATEADD (d, -7, DATEDIFF(dd, 0, GETDATE()))

就在订购之前。

出于性能原因,我建议将PublishedDate其编入索引。

于 2012-06-11T10:42:02.870 回答
1

如果 PublishDate 是 DATETIME 并且您只存储日期信息,或者如果您的列数据类型是 DATE (SQL 2008),这将起作用:

select a.firstName, a.lastName, b.Name, b.PicturePath, b.PublishDate
from authors a
join books b on a.authorID = b.AuthorsID
where b.PublishDate > getdate() -7
order by b.PublishDate

但是,如果您正在存储时间信息并且只想比较日期信息,则必须从左侧或右侧 + 1 天截断时间:

对于 SQL 2008:

select a.firstName, a.lastName, b.Name, b.PicturePath, b.PublishDate
from authors a
join books b on a.authorID = b.AuthorsID
where cast(b.PublishDate as Date) > getdate() -7
order by b.PublishDate

对于 SQL 2005 及以下版本:

select a.firstName, a.lastName, b.Name, b.PicturePath, b.PublishDate
from authors a
join books b on a.authorID = b.AuthorsID
where b.PublishDate > DATEADD (d, -8, DATEDIFF(dd, 0, GETDATE())) 
order by b.PublishDate

有几种截断时间的方法:

select convert(varchar, getdate(), 101)
select DATEADD (d, 0, DATEDIFF(dd, 0, GETDATE())) 

请参阅此 SO 问题以了解截断时间: Best approach to remove time part of datetime in SQL Server

要包括第 7 天,只需将 > 更改为 >=

于 2012-06-11T10:42:35.923 回答
1

您可以使用 TSQL DATEDIFF 函数,例如:

SqlCommand comm=new SqlCommand("SELECT * FROM Borrow WHERE DATEDIFF(day,StartDate,EndDate) > 7");
于 2012-06-11T10:43:27.490 回答
1

听起来您只需要在查询中添加 WHERE 子句:

WHERE PublishDate >= Getdate() -7

Getdate()函数返回日期和时间。因此,如果您的 PublishDate 没有时间,您将需要在查询中对此进行计划。

您可以使用以下方法删除时间:

WHERE PublishDate > DATEADD (d, -7, DATEDIFF(dd, 0, GETDATE()))
于 2012-06-11T10:46:42.430 回答
1

可能你想这样做:

select Authors.firstName,Authors.lastName,Books.Name,Books.PicturePath,
Books.PublishDate,
From Authors inner join Books
on Authors.authorId = Books.AuthorId
WHERE Book.PublishDate >= GETDATE() - 7
order by Books.PublishDate
于 2012-06-11T10:47:55.410 回答
1

当您使用查询设计器时,您可以在过滤器字段中传递过滤器。查询设计器。就像在过滤框 <'05/20/2012' 中发布数据一样,或者您可以在那里提供 sql server 的 getdate() 功能。然后减去你想要的日子。

于 2012-06-11T10:49:54.583 回答