2016-05-06 20 views
1


在我的程序中,我必須管理一些假期。每個假期都可以是確切日期,也可以是重複日期。在SQL數據庫中重複日期的表示

例如:

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

你我將如何節省分貝這些信息? 我不能使用Datetime,因爲使用日期時間我不能代表上述示例中的特定情況。

有什麼建議嗎?

如果可能關注,我使用TSQL

對不起,我英文不好。

+0

如果我理解正確,您希望在table.for中保存一個列作爲唯一日期(而不是datetime).so節點名稱varchar(255),HoliDate日期。 – KumarHarsh

+0

我會創建一個日曆表,使用20年的數據填充它,而不用擔心如何在數據庫中填充規則。將這些保存在一個腳本/存儲過程中,您可以在十年後運行(如果需要)。 –

+0

使用iCalendar RRules和ExDates,並使用物化視圖和一些C# –

回答

0

我建議一個3列設計來存儲此條件

  1. 列指定這是否是一個DayWeekDay

  2. 列指定Day/WeekDay Number(即1至30/31爲日,週日1〜7)

  3. 指定Monthly/Yearly的列(表示每月/年)

如: - 對於每個月的第一天,事情是這樣的:DAY,1,MONTHLY

對於每個月的第二個星期六:WEEKDAY,14*,MONTHLY(*我周開始爲週日)

這不是一個完美的解決方案,您可能需要添加更多列以完全滿足您的業務邏輯。

+0

@davidinho生成實際日期(在時間窗口中),您可以分享您用於處理場景的設計。 –

2

簡單的方法,沒有更多地瞭解您對這些數據的使用,將是有三個數字字段daymonthyear並將其解釋是這樣的:如果所有三個都充滿,這也正是那一天,沒有一天。如果年份沒有填滿,則是每年和每月重複一次。如果只有一天被填滿,那就是每一天重複的一天。

如果您有更復雜的重複計劃,您需要重複規則的屬性,如「每三個月」。

當然,每個查詢都需要包含一些邏輯來解釋此方案,但這是不可避免的,除非您決定列出所有節假日,比如說未來50年。

+0

有趣的思考方式+1 – Mark

+0

嗨,我們如何指定工作日,即每個星期天或每隔週六等? –

+0

對OP的問題描述沒有要求。當然,您可以定義一個完整的領域特定語言來描述日期功能。 – TAM