0

計算された日付の深夜から予約を取得するためのwhere句の一部として使用されるSQLデータ計算があります。

私の解決策:

bookDate >= (SELECT DATEADD(dd, -7, DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)))

オリジナルは:

bookDate >= DATEADD(dd, -7, GETDATE())

ただし、計算された日付+現在の時刻に戻ります

これに対する代替のはるかに単純なアプローチはありますか?

4

3 に答える 3

1

これは少し簡単です。

bookDate >= DATEADD(dd, DATEDIFF(dd, 0, GETDATE()) - 7, 0)

dateSQLServer2008およびSQLServer2012では、データ型を使用できます。

bookDate >= DATEADD(dd, -7, CAST(GETDATE() as DATE))
于 2012-03-23T17:01:08.163 に答える
0

以下は2005年にも機能します。

SELECT DATEADD(dd, -7, FLOOR(CAST(GETDATE() AS FLOAT)))

これが機能するのは、SQL Server(およびWindows)が日付を浮動小数点として格納し、整数が1900年1月1日の日数を表し、小数部分が時刻を表すためです。以下はより短く、この状況で私が通常使用するものとより一致しています。

SELECT FLOOR(CAST(GETDATE() AS FLOAT) -7)

DATEADDは、日数以外の計算を行う場合(つまり、月、年)に役立ちます。これは、月または年ごとに日数が異なるためです。日数で作業する場合、直接加算または減算する方が簡単なことがよくあります。同様に、たとえば、日付から2時間を減算する場合は、次を使用できます。

SELECT CAST(GETDATE() AS FLOAT) * 2.0/24.0
于 2012-03-26T06:12:13.827 に答える
0

次のようにすることもできます。

bookDate >= CAST(CONVERT(char(8), GETDATE() ,112) as datetime)
于 2012-03-26T07:15:42.653 に答える