私は、DBに保存する休日のリストを持っている必要があり、休日に基づいて営業日を計算します。休暇リストは、国によって異なり、すべての年に同じではありません。 ので、休日ごとに開始日と終了日の間の営業日を計算する必要があります。開始日と終了日は同じ年ではない可能性があります。 このケースでは、dbデザインをどのように維持するべきかを教えてください。休日の保管方法、保管方法は?
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は、2つの日付の間のすべての日列挙しますあなたの営業日のカウントを与える
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. Datalab - パッケージのインストールと保管方法
- 5. Redux:レデューサーからの保管方法
- 6. WCF/MQSeries:有毒メッセージの保管方法
- 7. Swift、Firebase、懐中電灯、アレイの保管方法は?
- 8. RRDを2年間保管する方法は?
- 9. Flask-USER管理でFlask-RESTfulを保護する方法は?
- 10. スウィフトアレイに長く長く保管する方法は?
- 11. 保管方法<image> xlink:base64エンコード後のhrefの作業
- 12. 脱水保管の代わりに他の方法
- 13. solr 6の管理ページの保護方法
- 14. Laravel 5.2の管理パネルを保護する方法
- 15. Xamarin Androidで安全で暗号化された保管方法
- 16. Magento管理パネルにカスタムフィールドを保存する方法
- 17. SkspriteNodeをコピーして別々に保管する方法
- 18. 文書索引を効率的に保管する方法
- 19. TFSパッケージ管理に保存ポリシーを適用する方法
- 20. 大きなファイルを保存して管理する方法
- 21. 保管* SQLiteデータベース
- 22. 保管JSONオブジェクト
- 23. 保管カーネル - PyOpenCL
- 24. 保管CSSポイント
- 25. 保管サブイメージデータ
- 26. マルチテーブルデータベースの管理方法は?
- 27. レルムインスタンスの管理方法は?
- 28. 保管RSS pubDateの
- 29. リモートデータベース管理方法?
- 30. 保管トラック、パート2
できますか? – satheesh
あなたはテーブル定義についてほとんど考えていないと助かります – satheesh
@satheesh:私はいくつかの情報で私の答えを更新しました。 –