165

[date]列のタイプが の 2 つのテーブルがありますDATETIME2(0)

2 つのレコードを日付部分 (日 + 月 + 年) だけで比較し、時間部分 (時間 + 分 + 秒) を破棄する必要があります。

どうやってやるの?

4

6 に答える 6

279

CASTSQL Server 2008の新しいデータ型に を使用してDATE、日付部分だけを比較します。

IF CAST(DateField1 AS DATE) = CAST(DateField2 AS DATE)
于 2009-12-03T22:24:32.577 に答える
63

マークの答えの小さな欠点は、両方の日付フィールドが型キャストされていることです。つまり、インデックスを活用できないということです。

したがって、日付フィールドのインデックスを利用できるクエリを作成する必要がある場合は、次の (かなり複雑な) アプローチが必要です。

  • インデックス付きの日付フィールド (DF1 と呼びます) は、どのような種類の関数にも影響されないようにする必要があります。
  • したがって、DF1 を DF2 の日の日時値の全範囲と比較する必要があります。
  • つまり、DF2 の日付部分から、DF2 の翌日の日付部分までです。
  • いえ(DF1 >= CAST(DF2 AS DATE)) AND (DF1 < DATEADD(dd, 1, CAST(DF2 AS DATE)))
  • 注: 比較が DF2 の日付に対して>= (等しいことが許される) であり、(厳密には) < DF2 の翌日であることが非常に重要です。また、BETWEEN 演算子は、両側が等しいため機能しません。

PS: (古いバージョンの SQL Server で) 日付のみを抽出する別の方法は、日付が内部でどのように表現されるかというトリックを使用することです。

  • 日付を float としてキャストします。
  • 小数部分を切り捨てる
  • 値を日時にキャストします
  • いえCAST(FLOOR(CAST(DF2 AS FLOAT)) AS DATETIME)
于 2009-12-04T17:27:13.430 に答える
-3

MM/DD/YYYYのような 2 つの日付をMM /DD/YYYYと比較し ます。Field の最初の列の型は dateTime でなければならないことに注意してください。例: columnName: payment_date dataType : DateTime

その後、簡単に比較できます。クエリは次のとおりです。

select  *  from demo_date where date >= '3/1/2015' and date <=  '3/31/2015'.

それは非常に簡単です......それはそれをテストしました.....

于 2015-06-13T14:35:27.357 に答える