0

asp.netプロジェクトでSQLDataSourceを使用してDBに接続し、過去7日間のDateTimeフィールド(PublishDate)で行をフィルター処理したい

(つまり、PublishDateがDateTime.Now-7日を超える本が表示されます)

あなたは私がこれまでに持っているものをスクリーンキャプチャで見ることができます

クエリでそれを行うにはどうすればよいですか(コードを使用して行を調べて日時を比較する必要はありません)?

ここに画像の説明を入力してください

4

6 に答える 6

1

次のWHERE句を追加します

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

ORDERBYの直前。

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の質問を参照してください: SQLServerで日時の時間部分を削除するための最良のアプローチ

7日目を含めるには、>を>=に変更するだけです。

于 2012-06-11T10:42:35.923 に答える
1

TSQLDATEDIFF関数を使用できます。次に例を示します。

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サーバーのgetdate()関数を指定できます。次に、必要な日数を差し引きます。

于 2012-06-11T10:49:54.583 に答える