asp.netプロジェクトでSQLDataSourceを使用してDBに接続し、過去7日間のDateTimeフィールド(PublishDate)で行をフィルター処理したい
(つまり、PublishDateがDateTime.Now-7日を超える本が表示されます)
あなたは私がこれまでに持っているものをスクリーンキャプチャで見ることができます
クエリでそれを行うにはどうすればよいですか(コードを使用して行を調べて日時を比較する必要はありません)?
asp.netプロジェクトでSQLDataSourceを使用してDBに接続し、過去7日間のDateTimeフィールド(PublishDate)で行をフィルター処理したい
(つまり、PublishDateがDateTime.Now-7日を超える本が表示されます)
あなたは私がこれまでに持っているものをスクリーンキャプチャで見ることができます
クエリでそれを行うにはどうすればよいですか(コードを使用して行を調べて日時を比較する必要はありません)?
次のWHERE句を追加します
WHERE Books.PublishedDate > DATEADD (d, -7, DATEDIFF(dd, 0, GETDATE()))
ORDERBYの直前。
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の質問を参照してください: SQLServerで日時の時間部分を削除するための最良のアプローチ
7日目を含めるには、>を>=に変更するだけです。
TSQLDATEDIFF関数を使用できます。次に例を示します。
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サーバーのgetdate()関数を指定できます。次に、必要な日数を差し引きます。