在我的 asp.net 项目中,我使用 SQLDataSource 连接到数据库,我想使用过去 7 天的 DateTime 字段(PublishDate)过滤行
(所以我看到 PublishDate 大于 DateTime.Now - 7 天的书籍)
你可以在屏幕截图中看到我到目前为止所拥有的
如何在查询中执行此操作(不使用代码来遍历行并比较日期时间)?
在我的 asp.net 项目中,我使用 SQLDataSource 连接到数据库,我想使用过去 7 天的 DateTime 字段(PublishDate)过滤行
(所以我看到 PublishDate 大于 DateTime.Now - 7 天的书籍)
你可以在屏幕截图中看到我到目前为止所拥有的
如何在查询中执行此操作(不使用代码来遍历行并比较日期时间)?
添加以下 WHERE 子句
WHERE Books.PublishedDate > DATEADD (d, -7, DATEDIFF(dd, 0, GETDATE()))
就在订购之前。
出于性能原因,我建议将PublishedDate
其编入索引。
如果 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 天,只需将 > 更改为 >=
您可以使用 TSQL DATEDIFF 函数,例如:
SqlCommand comm=new SqlCommand("SELECT * FROM Borrow WHERE DATEDIFF(day,StartDate,EndDate) > 7");
听起来您只需要在查询中添加 WHERE 子句:
WHERE PublishDate >= Getdate() -7
该Getdate()
函数返回日期和时间。因此,如果您的 PublishDate 没有时间,您将需要在查询中对此进行计划。
您可以使用以下方法删除时间:
WHERE PublishDate > DATEADD (d, -7, DATEDIFF(dd, 0, GETDATE()))
可能你想这样做:
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
当您使用查询设计器时,您可以在过滤器字段中传递过滤器。查询设计器。就像在过滤框 <'05/20/2012' 中发布数据一样,或者您可以在那里提供 sql server 的 getdate() 功能。然后减去你想要的日子。