我需要有一個假期列表來存儲在分貝和計算基於holidays.holidays列表的工作日將有所不同,不同的國家和不同的所有年份。 所以我需要按照假期計算開始和結束日期之間的工作日。開始日期和結束日期可能不在同一年。 所以在這種情況下,我應該如何維護db設計。如何存儲?
Q
如何存儲?
0
A
回答
0
假期必須是區域設置和年份相關的。
如果有節假日下降的規則,也許這些代碼更好地表達。這些可以是您將用於每年填充業務日曆的觸發器或存儲過程。
0
create table holidays{
country_id int,
name text,
start_date date,
end_date date
}default charset=utf8;
計算工作日並不簡單,因爲您需要定義什麼是工作日。在很長一段時間內,您可以大致發現天數差異並乘以5/7。在很短的時間內,你會想要更高的精度,所以應該用編程邏輯來代替。
1
做一個表,每個國家的節日:
CREATE TABLE Holidays
(
Country INT NOT NULL,
[Date] DATE NOT NULL,
CONSTRAINT PK_Holidays PRIMARY KEY CLUSTERED (Country, [Date])
)
然後做一個CTE列舉兩個日期之間的所有天:
WITH Dates ([Date] Date)
AS
(
SELECT @StartDate
UNION ALL
SELECT DATEADD(DAY, @StartDate, 1)
FROM Dates Where Dates.Date < @EndDate
)
SELECT COUNT(1) FROM Dates
WHERE [Date] NOT IN (SELECT [Date] from Holidays WHERE Country = @CountryCode)
AND DATEPART(WeekDay, [Date]) NOT IN (6,7)
WITH (MAXRECURSION = 10000)
這會給你的工作日數。 CTE查詢建立了@StartDate和@EndDate之間所有日期的列表,然後過濾掉那些在特定國家作爲節假日列出的日期,而不是星期幾編號6或7(我認爲它映射到星期六和星期日)。
相關問題
- 1. 如何存儲
- 2. 如何存儲
- 3. 如何存儲在存儲過程中
- 4. 如何存儲VARIANT
- 5. 如何存儲PathGeometry?
- 6. 如何將數據存儲在存儲器或寄存器中
- 7. TortoiseSVN,如何轉儲存儲庫?
- 8. 我如何保存和如何可以存儲在鉻本地存儲陣列相關的鉻本地存儲
- 9. Java如何存儲空值?
- 10. MySQL如何存儲索引?
- 11. 如何存儲Markdown評論
- 12. Objective C,如何存儲UIImage
- 13. 如何存儲時區?
- 14. 如何存儲在NSMutableArray中
- 15. 如何去存儲以JSON
- 16. 如何從存儲過程
- 17. boost :: dynamic_bitset如何存儲位
- 18. 如何存儲的SelectList
- 19. 如何使用Firebase存儲?
- 20. 如何存儲圖像 - Codeigniter
- 21. 如何存儲/使用Java
- 22. default_token_generator如何存儲令牌?
- 23. 如何存儲時間表?
- 24. 如何存儲DOM節點?
- 25. 如何存儲varchar索引?
- 26. MercurialEclipse如何存儲密碼?
- 27. 如何存儲在變量
- 28. 如何獲得S3存儲
- 29. Hibernate如何存儲集合?
- 30. 如何存儲類型T
能我可以得到你的命令更多的解釋 – satheesh
先生,如果我對錶格定義的想法不大,那麼將會有所幫助 – satheesh
@satheesh:我已經用一些更多的信息更新了我的答案。 –