SQL Server:日付を求める式のサンプル(月末、月の1日、締め)及びユーザー定義関数

SQL Server

SQL Serverで月末日や月初(1日)の日付を求める式、20日締めなどの締め日を基準とした集計期間の集計を求めるユーザー定義関数とそのサンプルSQLを覚書

データベースのデータを基に月初(1日)から月末までのデータを集計することはよくあること。

また、集計期間は必ずしも月初~月末とは限らず、20日締め(先月21日~今月20日まで)のデータの集計も求められる。

締め期間の集計はつどCase文を使ったのでは長くて面倒なのでユーザー定義関数を作成しておく。

忘れないように覚書。

月初や末日の日付を求めるサンプルSQL

月初や末日などの日付を求めるサンプルSQLを以下に記載する。

何れもSQL Serverの日付関連の関数を使ったSQL文。

先月末日

先月の月末日を求めるSQLの例。

今月1日

今月の月初(1日)を求めるSQLの例。

先月の1日

先月の月初(1日)を求めるSQLの例。

絞め日対応

20日締めを例として、仮に今日が10/22だったとして、9/21~10/20を10月分のデータとする例。

考え方としては、日付の日の部分が21以上だったら月に1を足して、20以下だったら月はそのままとする。

抽出しやすいように9/21~10/21をYYYYMMの文字列として表す。

SQL文の中で直接記述すると長くなるので、日付を引数としてYYYYMMのデータを返すスカラー関数を作成する。

作成した関数をビュー上のフィールドに記述して該当するデータを抽出する。

サンプルの実行環境としてNorthwindサンプルデータベースを利用した。

作成した関数は以下の通り。

以下は、作成した関数を利用したサンプルSQL文。

NorthwindのOrderテーブルを使用(RequiredDateを基準日とした)。

1996年9月度(1996/8/21~1996/9/20)のデータを抽出する例。

実行結果はこんな感じ。