2016-05-06 3 views
1


私のプログラムでは、休日を管理する必要があります。各休日には、正確な日付または繰り返し日付を使用できます。例えばSQLデータベースの反復日付の表現

-6th January of each years 
-first day of each month of each year 

どのように私は、DB上でこの情報を保存しますか? 私はDatetimeを使用できません。上記の例のように、datetimeでは特定のケースを表すことができないためです。

提案がありますか?それは関係性がある場合

、私は私の下手な英語のための

申し訳TSQLを使用しています。

+0

正しく理解していれば、1つの列を日付(日付時間ではなく)として保持するtable.forに休日リストを保存したい場合.so holidayname varchar(255)、HoliDate Date。 – KumarHarsh

+0

私はカレンダーテーブルを作成し、20年分のデータを取り込み、データベース自体の中にどのようにデータが埋め込まれているかについての規則をエンコードする心配はしません。これらをスクリプト/ストアドプロシージャに保存して、別の10年後に実行することができます(必要に応じて)。 –

+0

iCalendar RRulesとExDatesを使用して、マテリアライズドビューで実際の日付(時間枠内)を生成し、C# –

答えて

0

私は、この日のために31分の30〜Day/WeekDay Number(すなわち1を指定するにはDayまたはWeekDay

  • 列であるかどうかを指定するには、この条件

    1. 列を格納するための3カラムデザインを示唆しています平日の場合は1〜7)

    2. Monthly/Yearlyオカレンスを指定する列

    例: - 各月の最初の日のために、このような何か:毎月第2土曜日にDAY,1,MONTHLY

    WEEKDAY,14*,MONTHLY(*マイ・ウィーク開始は日曜日)

    これは完璧なソリューションではありませんビジネスロジックを完全に満たすために列を追加する必要があります。

  • +0

    @ davidinhoを使用して、シナリオの処理に使用するデザインを共有できますか? –

    2

    シンプルなアプローチは、これらのデータの使用状況についての詳細を知らなくても、3つの数値フィールドdaymonthyearを持ち、それらをこのように解釈することになります。すべての3つが満たされている場合、それはまさにその日となし、他の日です。年が満ちていなければ、それは毎年繰り返される日と月です。唯一の日が満ちていれば、それは毎月繰り返される日です。

    複雑な繰り返しスキームがある場合は、「3か月ごと」などの繰り返しルールの属性が必要です。

    もちろん、すべてのクエリにはこのスキームを解釈するためのロジックが含まれている必要がありますが、それは次の50年というすべての祝日のリストを持つことを決めた場合を除いて避けられません。

    +0

    興味深い考え方+1 – Mark

    +0

    こんにちは、平日、毎週日曜日、または毎週土曜日などをどうやって指定できますか? –

    +0

    OPの問題の説明にその必要はありません。もちろん、日付機能を記述するためのドメイン固有の言語全体を定義することもできます。 – TAM

    関連する問題