在我的程序中,我必須管理一些假期。每個假期都可以是確切日期,也可以是重複日期。在SQL數據庫中重複日期的表示
例如:
-6th January of each years
-first day of each month of each year
你我將如何節省分貝這些信息? 我不能使用Datetime
,因爲使用日期時間我不能代表上述示例中的特定情況。
有什麼建議嗎?
如果可能關注,我使用TSQL
對不起,我英文不好。
在我的程序中,我必須管理一些假期。每個假期都可以是確切日期,也可以是重複日期。在SQL數據庫中重複日期的表示
例如:
-6th January of each years
-first day of each month of each year
你我將如何節省分貝這些信息? 我不能使用Datetime
,因爲使用日期時間我不能代表上述示例中的特定情況。
有什麼建議嗎?
如果可能關注,我使用TSQL
對不起,我英文不好。
我建議一個3列設計來存儲此條件
列指定這是否是一個Day
或WeekDay
列指定Day/WeekDay Number
(即1至30/31爲日,週日1〜7)
指定Monthly/Yearly
的列(表示每月/年)
如: - 對於每個月的第一天,事情是這樣的:DAY,1,MONTHLY
對於每個月的第二個星期六:WEEKDAY,14*,MONTHLY
(*我周開始爲週日)
這不是一個完美的解決方案,您可能需要添加更多列以完全滿足您的業務邏輯。
@davidinho生成實際日期(在時間窗口中),您可以分享您用於處理場景的設計。 –
簡單的方法,沒有更多地瞭解您對這些數據的使用,將是有三個數字字段day
,month
,year
並將其解釋是這樣的:如果所有三個都充滿,這也正是那一天,沒有一天。如果年份沒有填滿,則是每年和每月重複一次。如果只有一天被填滿,那就是每一天重複的一天。
如果您有更復雜的重複計劃,您需要重複規則的屬性,如「每三個月」。
當然,每個查詢都需要包含一些邏輯來解釋此方案,但這是不可避免的,除非您決定列出所有節假日,比如說未來50年。
如果我理解正確,您希望在table.for中保存一個列作爲唯一日期(而不是datetime).so節點名稱varchar(255),HoliDate日期。 – KumarHarsh
我會創建一個日曆表,使用20年的數據填充它,而不用擔心如何在數據庫中填充規則。將這些保存在一個腳本/存儲過程中,您可以在十年後運行(如果需要)。 –
使用iCalendar RRules和ExDates,並使用物化視圖和一些C# –