いくつかのエントリを通過するループがあります。ループで作成日を取得しているので、同じ日にエントリが挿入されているかどうかを確認する必要があります。したがって、たとえば、の場合creation date = 2011-08-31 21:19:14.345
、作成日がとの間であるすべての行を選択する必要があり2011-08-31 00:00:00.000
ます2011-08-31 23:59:59.999
SQLでこれを行うにはどうすればよいですか?
いくつかのエントリを通過するループがあります。ループで作成日を取得しているので、同じ日にエントリが挿入されているかどうかを確認する必要があります。したがって、たとえば、の場合creation date = 2011-08-31 21:19:14.345
、作成日がとの間であるすべての行を選択する必要があり2011-08-31 00:00:00.000
ます2011-08-31 23:59:59.999
SQLでこれを行うにはどうすればよいですか?
その日のすべての時間をキャッチするには、これを行います:
SELECT * FROM MyTable
WHERE DateCreated >= @TheDate AND DateCreated < DATEADD(day, 1, @TheDate)
@TheDate
時間のない純粋な日付はどこにあるに違いありません。DateCreated
深夜に非常に近い時間部分がある場合でも機能します。
他のスキーマの詳細がなく、これがSQL Server 2K8 +の場合は、次のように実行できます。
DECLARE @CreationDate Date = '2011-08-31';
SELECT *
FROM SomeTable
WHERE CONVERT(Date, CreationDate) = @CreationDate;
date
作業する代わりに変換することによりdatetime
、時間コンポーネントが失われ、値の比較方法が「正規化」されます。
比較のために時間コンポーネントを失う別の方法は次のとおりです。
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
date
データ型がない場合は、これを使用します。
あなたはこれを試すことができます:
SELECT * FROM SomeTable
WHERE
DAY(TDATE) = DAY(CreationDate)
AND
MONTH(TDATE) = MONTH(CreationDate)
AND
YEAR(TDATE) = YEAR(CreationDate)