Serverの柔軟な日付関数とカレンダーテーブルカレンダーのテーブルを使用して、銀行の休日や週末を保存および計算し、繰り返しの頻度を設定することで、最もポータブルな機能の一部を共有しています。私たちが以前に行った仕事の大部分は、日付、年齢、その他のさまざまな情報を扱うことを含んでいます。年齢の計算などは、可能な限り単純ではありません。以前にいくつかの記事を作成しましたが、これらの記事は、必要な機能の数を減らすために、より柔軟な機能に置き換えられています。この記事では、再利用可能なカレンダーテーブルと銀行休業日テーブルを設定し、それを設定します。さまざまな機能が個別の記事として作成され、詳細情報を入手できます。変更管理の必要性と一貫性のあるデータを削減するために、すべての機能を備えた共有の「ユーティリティ」データベースを使用する傾向があります。2016の単一のスクリプトで実行されるように設計されています。-ログファイルの肥大化を防ぐためにオプションをシンプルに設定し、データがビジネスクリティカルになる可能性が低くなります。管理を容易にするために、Datesというスキーマを作成し、関連するすべての情報をこれに保存します。この意味でのスキーマは、関連オブジェクトのコンテナまたは名前空間と考えてください。-バッチSQLステートメントでスキーマを作成する場合、sp_executesqlステートメントにラップして、システムがバッチ内の唯一のステートメントであると文句を言うのを防ぎます。存在する可能性がある場合は、tryブロックにラップして、コードを実行できるようにします。CATCH;GO共有機能さらに使用される共有関数がいくつかありますので、各ページの説明とともに、コードとリンクを提供します。注意すべき点がいくつかあります。標準のDateDiff年の計算は純粋に年であるため、年齢を計算するには、その日付がより高いかどうかを確認する必要があります。GetLeapYear関数は、日を追加する必要がある場合に最も賢明な方法でした。新しいDateFromParts関数を使用しないと、日詰めが不足しているため、イースターの日付が失敗する可能性があります。@GregorianEasterENDGO頻度表スケジューリングと繰り返しには、独自のスケジューリングテーブルを使用します。これにより、何かを繰り返す頻度を計算できます。3GOカレンダー表カレンダーテーブルは、DATETIME2の範囲内の任意の期間実行されるように設定されています。一般的な使用では、以下のコードはほとんどのシナリオをカバーする範囲を提供します。CalendarCAおよびCalendarCDは、各月の昇順および降順の週番号であり、上記の頻度表に対する相互参照で使用されます。Function列を追加してさまざまなオプションを保存できるようにしました。以下に、イングランドとウェールズ、スコットランド、北アイルランドの祝日を別々に保存し、作成済みのカレンダーテーブルを相互参照します。理論的には、好きなだけスキームを作成できます。DayGO賢いビットさまざまな方法でそれらを組み合わせる3つの関数が使用され、すべて非常に類似したオプションがあります。GetDateAdjustedは、カレンダー機能に応じて、設定された日数だけ日付を前後に移動し、休日を含めるか週末を含めるかを決定します。GetDaysAdjustedは、カレンダー機能と、休日を含めるか週末を含めるかによって、2つの日付間の日数をカウントします。日付は、包括的または排他的にカウントできます。GetMonthAdjustedは、カレンダー機能と、休日と週末のどちらを含めるかによって、月の日数をカウントします。日付は包括的または排他的にカウントできます。Server関数で月の日数を数えるデータを結合するselectステートメントに結合を追加できますが、別の関数で参照する方が簡単であることがわかりました。2つの日付、頻度、および昇順と降順の月の週番号の両方を追加すると、関連する日付が一致するかどうかを確認できます。@JENDGOすべてを結合-テストデータこれで、偽のスケジューリングテーブルを生成して、このデータをテストできます。この例では、2017年1月1日にレポートを作成し、可能なすべての日付アクションを使用して、毎月最初に繰り返します。2018年1月1日を単独で見ると、週末と銀行休業日は、日付範囲を2017年12月29日から2018年2月1日までに変更する可能性があります。