1

SQLServerテーブルに以下のデータがあります

 Id    Name   StartDate    EndDate
 1      A      2/2/2012     21/2/012
 2      B      3/2/2012     2/2/2014
 3      C      21/2/2012    3/3/2012
 4      D      1/1/2012     3/3/2012

Start Dateがあり、今日の日付とEnd Date一致するすべての行をフェッチしたい

助けてください。

4

2 に答える 2

3

範囲を現在の日付と一致させたい場合は、StartDateEndDateがタイプであると仮定してdate、次のことを試すことができます。

SELECT ...
FROM atable
WHERE CAST(GETDATE() AS date) BETWEEN StartDate AND EndDate
;

上記は基本的にこれと同じです:

SELECT ...
FROM atable
WHERE StartDate <= CAST(GETDATE() AS date)
    AND EndDate >= CAST(GETDATE() AS date)
;

ただし、オプティマイザーが2番目のバージョンとして変換できなかった場合、最初のバージョンではクエリプランが悪化する可能性があります。したがって、パフォーマンスが重要な場合は、最初にテストしてから決定する必要があります。

上記の両方のバージョンは、それEndDateが包括的であることを前提としていることに注意してください。排他的である場合は、2番目のバージョンを使用して、少し変更することができます。

SELECT ...
FROM atable
WHERE StartDate <= CAST(GETDATE() AS date)
    AND EndDate >  CAST(GETDATE() AS date)
;

これにさらに単純化することができます:

SELECT ...
FROM atable
WHERE StartDate <= GETDATE()
    AND EndDate >  GETDATE()
;

しかし、それはおそらく暗黙の変換を使用し、パフォーマンスに影響を与える可能性がありますが、それがあなたに受け入れられるかどうかについては、どの程度か、さらにはわかりません。繰り返しますが、テストして比較する必要があります。一般的に、私はより単純なバージョンから始めて、現在のパフォーマンスに満足していなかった(またはもはや満足しなくなった)場合の代替案を念頭に置いています。

于 2013-02-24T17:18:31.960 に答える
1

「開始日と終了日が今日の日付と一致するデータ」について私が理解できることから、開始日と終了日が今日と等しいすべてのデータを取得したいようです。

これはクエリです:

SELECT *
FROM TableName
WHERE StartDate = cast(getDate() As Date) AND EndDate = cast(getDate() As Date);
于 2013-02-24T16:40:26.783 に答える