2011-12-06 13 views
3

私はいくつかのエントリを通過するループを持っています。ループの中で私は創造日を得ており、同じ日にエントリーが挿入されているかどうかを調べる必要があります。たとえば、creation date = 2011-08-31 21:19:14.345の場合、作成日が2011-08-31 00:00:00.0002011-08-31 23:59:59.999の間であるすべての行を選択する必要があります。SQL Server:同じ日に挿入された行を選択する方法?

SQLでこれを行うにはどうすればよいですか?他のスキーマの詳細がなく

+2

ループは通常、貧しい練習で、私たちは、あなたがそうしている私たちはより良いセットベースの方法にあなたを指すことができますかについて、いくつかの詳細を持っているだろうか? – HLGEM

答えて

3

、これはSQL Serverの2K8 +であれば、あなたがこれを行うことができます:dateへの変換の代わりに、datetimeと協力することで

DECLARE @CreationDate Date = '2011-08-31'; 

SELECT * 
FROM SomeTable 
WHERE CONVERT(Date, CreationDate) = @CreationDate; 

をあなたは時間コンポーネントを失い、どのように「正常化」あなたは値を比較しています。比較のために時間コンポーネントを失う

別の方法がある:あなたがdateデータ型を持っていない場合

DECLARE @CreationDate DateTime; 
SELECT @CreationDate = '2011-08-31 21:19:14.345'; 

SELECT @CreationDate; -- 2011-08-31 21:19:14.345 
SELECT @CreationDate = CONVERT(DateTime, FLOOR(CONVERT(Float, @CreationDate))); 
SELECT @CreationDate; -- 2011-08-31 00:00:00.000 

あなたはそれを使用します。その日のすべての回をキャッチするために

+0

申し訳ありませんが、私はMSSQLを使用していることを忘れていました。日付タイプはありません: – Sergejs

+0

@Sergejs:MSSQL **は** date型を持っています。おそらくあなたのバージョンではありません。私の改訂された答えを見て、あなたが使っているバージョンで質問にタグを付けてください。 – Yuck

+0

完璧!あなた – Sergejs

4

は、次の操作を行います。@TheDateは、時間のない純粋な日付でなければなりません

SELECT * FROM MyTable 
WHERE DateCreated >= @TheDate AND DateCreated < DATEADD(day, 1, @TheDate) 

DateCreatedに深夜0時に近い時間部分があっても動作します。

0

あなたはこれを試すことができます。

SELECT * FROM SomeTable 
WHERE 
DAY(TDATE) = DAY(CreationDate) 
AND 
MONTH(TDATE) = MONTH(CreationDate) 
AND 
YEAR(TDATE) = YEAR(CreationDate) 
関連する問題