ODBCの日付/時刻であるstatusdate
という列を持つSQL Serverテーブルがあります。
SELECT query WHERE statusdate
は、2つの日付(開始日と終了日)の間の範囲を返すことができるように作成する必要があります。私はWHERE
ステートメントでDATEDIFF
を使用するように言われました。これは正しいのですが、構文は何ですか?与えられた2つの日付間でクエリを返すSQL Serverの構文
BETWEEN
をしないのはなぜ
ODBCの日付/時刻であるstatusdate
という列を持つSQL Serverテーブルがあります。
SELECT query WHERE statusdate
は、2つの日付(開始日と終了日)の間の範囲を返すことができるように作成する必要があります。私はWHERE
ステートメントでDATEDIFF
を使用するように言われました。これは正しいのですが、構文は何ですか?与えられた2つの日付間でクエリを返すSQL Serverの構文
BETWEEN
をしないのはなぜ
:?
SELECT *
FROM YourTable
WHERE statusdate BETWEEN StartDate AND EndDate
データ型がDATETIME、DATETIME2、SMALLDATETIMEなどの場合、BETWEENは賢明ではありません。両端が開いている範囲がはるかに安全です。 –
@AaronBertrand - Yeap、あなたは正しいです。それが問題なのかどうかは疑問にはっきりしていませんでしたが、それは日付について話していたので、私はMikaelErikssonのように、私のasnwerでこれについて明確にしていたはずです。 – Lamak
Lamak - BETWEENは魅力的な働きをした...ありがとう。 –
は、SQL Server 2012分の2008との間であなたが使用することができますdate
データ型を使用している場合。
select *
from YourTable
where statusdate between @StartDate and @EndDate
あなたがdatetime
を使用している場合、私はあなたが関係なく、時間の部分のすべての値を取得することを確認する代わりに>=
と<
を使用することをお勧め。
select *
from YourTable
where statusdate >= @StartDate and
statusdate < dateadd(day, 1, @EndDate)
更新
私は私のWHERE文でDATEDIFFを使用するように言われてきました。これは正しいですか
いいえ、これにはdatediff
を使用しないでください。
とは何ですか?
ここに...使用しないでください。
select *
from YourTable
where datediff(day, statusdate, @StartDate) = 0 and
datediff(day, statusdate, @EndDate) = 0
+1個人的に私は "date **データ型で"と** only **と言うでしょう: ":-) –
これはどういう意味ですか? "statusdateは2つの日付間の範囲を返すことができます"。あなたはSQLの 'between'キーワードを探していますか?それはあなたの描写ではないからです。 – Marc