2016-07-15 7 views
2

第1クエリで今日のレコードと昨日のレコードが返される可能性はありますが、第2クエリは昨日だけ返されます。唯一のstart/endの日付を提供することが許可されているように私はBETWEENを使用することはできませんSQLの日付比較の問題

第一

SELECT 
    * 
FROM 
    table 
WHERE 
    DateTimeOfInsert >= '20160714' 

第二

SELECT 
    * 
FROM 
    table 
WHERE 
    DateTimeOfInsert >= '20160714' 
    AND 
    DateTimeOfInsert <= '20160715' 

+0

あなたはDateTimeOfInsert <= '20160715' DateTimeOfInsert < '20160716' –

+0

@JatinPatelしかし、なぜに変更する必要があります。

あなたのクエリは次のようになりますか? '<='はうまくいくはずですね。 – fishmong3r

+1

時間部分を除いた日付のみを指定すると、その日の真夜中にのみ一致します。それは深夜から時間がある場合、日付を無視します。 –

答えて

4

時間がありませんでした。技術的に2016-07-14 00:00:00〜2016-07-15 00:00:00を検索していますが、これは2016-07-14データのみで構成されています。

あなたはその後、両方の2日間に検索する必要がある場合:

SELECT 
    * 
FROM 
    table 
WHERE 
    DateTimeOfInsert >= '2016-07-14 00:00:00' 
    AND 
    DateTimeOfInsert <= '2016-07-15 23:59:59' 

または単に2016年7月14日夜12時間を意味第二の条件

DateTimeOfInsert <= '20160716' 

のためにこれを使用します。 00〜2016-07-16 00:00:00

+0

ただ実現しました。 'CAST(DateTimeOfInsert AS DATE)'を使用しました。しかし、ありがとう。 – fishmong3r

+0

を使用すると、列を現在の日付にキャストする代わりに、パラメータまたは固定値を調整して、1日の終わりまでの時間を含めることをお勧めします。それはパフォーマンスポイントでより良いでしょう –

+0

@JatinPatel私は聞いています。 'CAST'はパフォーマンス面で悪いですか? – fishmong3r

0

なぜBETWEENstatementを使用しないのですか?

SELECT * 
FROM table 
WHERE DateTimeOfInsert >= '2016-07-14 00:00:00' 
AND DateTimeOfInsert < '2016-07-16 00:00:00' 
+0

私の質問をお読みください。なぜ私は「BETWEEN」を使うことができないのか説明しました。 – fishmong3r

+1

だから、真夜中前の最後の2秒間に起こったことすべてを無視したいのですか? (ゼロでないミリ秒値)。これは、ほとんどの人が 'BETWEEN'を使い、' <= 'ではなく' <'を使うことを薦めている理由です。 *排他的なエンドポイントは、計算が容易である傾向があり、使用されるデータ型の精度に依存しません。 –

+0

'DateTimeOfInsert> '2016-07-14 00:00:00''(除外)は' DateTimeOfInsert> =' 2016-07-14 00:00:00''でなければなりませんが、終了条件は正しいです。 – Lucero