は、私が行くには2つの方法がそこにいると思う:
(1)ストアストリングのような日付の、:
'2013' -- year 2013
'2013-01' -- year 2013, January
'2013-01-01' -- year 2013, January 1
(2)ストア3異なる列、年、月、日(および年月+月+日付を作成できます)
2013 null null -- year 2013
2013 1 null -- year 2013, January
2013 1 1 -- year 2013, January 1st
どちらが最適かは、どのようにデータをクエリするかによって異なります。プロシージャーを保管していて、パラメーターを渡してすべての行を条件に入れたいとします。
場合
(1)、あなたは、パラメータとして文字列@Date = '2013-01'
渡し、あなたは= 2013年と月は= 01だからwhere
句は次のようになり、すべての行を取得したい:
where left(Date, len(@Date)) = @Date
をケース(2)では、次の3つのパラメータを渡す - @Year = 2013, @Month = 1, @Day = null
とwhere
句は次のようになり、何かのように:
where
Year = @Year and -- Supposing @Year is always not null
(@Month is null or @Month is not null and Month = @Month) and
(@Day is null or @Day is not null and Day = @Day)
行をどのように処理したいかによって、より複雑になることがあります。たとえば、2013-01
のようなパラメータを指定した場合、month = nullの行を取得したいのですか?
一方、日付を渡して日付範囲に入るかどうかを確認するには、Gordon Linoffの提案を使用することをお勧めします。
コードを入力してください。 –
これはうんざりです。私はそのデータを表現するためのクリーンでシンプルな方法を考えることはできません。 – user2246674
どのような種類のクエリを実行しますか? –