1

テーブルにフィールドがあり、それはではなくEvent.EventDateデータ型であり、次の句を持つビューがあります。DATEDATETIMEWHERE

WHERE e.EventDate >= CAST(CONVERT(VARCHAR(MAX), GETDATE(), 101) AS DATETIME)

ご覧のとおり、>=今日の日付ですべてのイベントを取得しようとしています。上記のコードは機能しますが、見苦しいです。私はこれを試しました...

WHERE e.EventDate >= CONVERT(VARCHAR(MAX), GETDATE(), 101)

... この ...

WHERE e.EventDate >= CONVERT(DATETIME, GETDATE(), 101)

...しかし、それらは機能しませんでした、彼らは私に>今日の日付のすべてのイベントを与えました。ただし、上記が機能したとしても、それでも醜いです。

もっと良い方法はありませんか?

4

2 に答える 2

3

試す:

WHERE e.EventDate >= cast(getdate() as date)

getdate()を日時にキャストします。これは、SQL Server 2008以降では、日時タイプの時間部分を取り除くためのクリーンな方法です。

于 2012-11-01T03:12:07.760 に答える
0

Shan Plourdeの方法を使用すると、確かにクリーンで高速になりますがdatetime、特定の時間間隔に丸めたい場合のより一般的なケースでは、

dateadd(dd,datediff(dd,0,[datetime column]),0)

ここで、ddは日を表し、mm(月)、hh(時間)、mi(分)などに置き換えることができます。

たとえば15分間隔で派手に丸めたい場合は、次を使用できます。

dateadd(mi, 
        -datepart(mi,[datetime column])%15,
        dateadd(mi,datediff(mi,0,[datetime column]),0)
        )

ここ%で、はモジュロ演算子です。60を均等に分割する間隔を使用しない場合、これに対して奇抜な結果が得られます。

于 2012-11-01T04:08:59.807 に答える