ここでは、比較的経験の浅い SQL ユーザーです。私がやりたいことは、毎年、月に 1 回だけエントリーすることです。SQLでこのようなdatetimeを使用する方法はありますか?
4 に答える
と列、およびに一意のインデックスをmonth
追加します。例えば:year
(year, month)
create unique index UX_YourTable_YearMonth on YourTable(year, month)
私は間違いなく、日付を月の 1 日として保存できる単一の日付/時刻フィールドに保存します。
を使用して、日付を月の 1 日に簡単に変えることができます。DATEADD(month, DATEDIFF(month, 0, @mydate), 0)
日付フィールドを使用する利点は、Excel Pivot、Access、SQL Server Reporting Services などのほとんどのレポート ツールを使用して、任意の期間 (隔月、四半期など) でレポートを作成する際のグループ化が容易になることです。
日付が常に同じ日時に挿入される場合は、可能です。たとえば、日付が常にこのように見える場合は、mm/01/yyyy 12:00:00
これでうまくいきます。しかし、あなたの日付がこのようになるとは思えません。キーを2つの別々の列に配置することをお勧めしますmonth, year
これには、日時またはタイムスタンプを使用しないことをお勧めします。代わりに、年と月に別々の列を使用してください。CHECK() 制約を使用して値を正常に保ちます。dbms が CHECK() 制約 (MySQL など) を強制しない場合は、有効な年と有効な月の追加のテーブルを作成し、それらへの外部キー参照を設定します。
create table your_table_name (
year integer not null check (year between 2000 and 2050),
month integer not null check (month between 1 and 12),
-- Other columns go here.
primary key (year, month)
);