3

いくつかのエントリを通過するループがあります。ループで作成日を取得しているので、同じ日にエントリが挿入されているかどうかを確認する必要があります。したがって、たとえば、の場合creation date = 2011-08-31 21:19:14.345、作成日がとの間であるすべての行を選択する必要があり2011-08-31 00:00:00.000ます2011-08-31 23:59:59.999

SQLでこれを行うにはどうすればよいですか?

4

3 に答える 3

4

その日のすべての時間をキャッチするには、これを行います:

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

@TheDate時間のない純粋な日付はどこにあるに違いありません。DateCreated深夜に非常に近い時間部分がある場合でも機能します。

于 2011-12-06T18:34:54.927 に答える
3

他のスキーマの詳細がなく、これが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データ型がない場合は、これを使用します。

于 2011-12-06T18:26:03.113 に答える
0

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

SELECT * FROM SomeTable  
WHERE   
DAY(TDATE) = DAY(CreationDate)  
AND  
MONTH(TDATE) = MONTH(CreationDate)  
AND  
YEAR(TDATE) = YEAR(CreationDate)
于 2011-12-06T18:36:35.467 に答える