指定された月の日数をSQLで求める

公開日: : 最終更新日:2013/12/10 SQL Server ,

指定された月の日数をSQLで求める

calender
SQLServerには該当月の日数を求める関数がないので
自力で求める必要があります。

該当月の月初と月末を求め計算する

指定月の月初求める

まずは指定月の月初を求めます。
月初は

で算出します。
内容は指定された月の年月を取り出して「1日」を
連結しています。
(後で使いやすいようにCONVERT()関数で日付型に変換しています。)

実行結果は(今日が「2013/12/02」だとすると)

になります。

指定月の次月の月初求める

次には指定月の次月の月初を求めます。
月初は

で算出します。
内容は指定された月に+1ヶ月しての年月を取り出して
「1日」を連結しています。
(これも後で使いやすいようにCONVERT()関数で日付型に変換しています。)

実行結果は(今日が「2013/12/02」だとすると)

になります。

次月の1日から今月の1日を引く

上記で求めた次月の1日から今月の1日を
DATEDIFF()関数で引くと
今月の日数が出てきます。
SQLは

で実行結果は

になります。

閏年の計算も可能

閏年もこの処理で正しく日数を取得できます。
まずは普通の年。

で実行結果は

次は閏年で

で実行結果は

になり正常に取得できます。

使用上の注意

上記のSQLは月に+1ヶ月するので年月が「9999/12」の時に
オーバーフローしてランタイムエラーになります。
「9999/12」がありえる処理の場合はチェックする処理が
必要になります。

スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • 13 follow us in feedly

関連記事

ALTER TABLEのALTER COLUMNで「列 ‘xxxxx’ に依存しています」とエラーになる

ALTER COLUMNで「列 'xxxxx' に依存しています」とエラー SQLServerでカ

記事を読む

ユーザー定義テーブル型変数を使用する

ユーザー定義テーブル型を使ってみる SQLServer 2008には、テーブル構造の定義を表す

記事を読む

SQLServerのテーブルやカラムにコメントをつける方法

SQLServerでテーブルやカラムにコメントをつける SQLServerで作成したテーブルやカラ

記事を読む

SQL Server-ストアドプロシジャーのソースを表示する2

過去の投稿「SQL Server-ストアドプロシジャーのソースを表示する1」で示した方法では 1つ

記事を読む

呼び出したストアドプロシジャーの戻り値を使用する

呼び出したストアドプロシジャーの戻り値を使用する 処理の構成上、ストアドプロシジャーから他のストア

記事を読む

SQLで文字列を反転させる

SQLで文字列を反転させる SQLで文字列を"012345"を後ろから並び変えて"543210"の

記事を読む

SQLServerでTrue,FalseのようなBoolean型をあつかう

SQLServerでBoolean型を扱う SQLServerには「Boolean」という型は

記事を読む

ORDER BYでNULLのカラムを最後に表示

ORDER BYでNULLのカラムを最後に持ってくる SQLで何も考慮せずに「ORDER BY」す

記事を読む

SQLで順位を取得するRANK()とDENSE_RANK()

SQLで順位を取得する SQLServerで項目の順位付け関数を利用して 順位をします。

記事を読む

SQLで日付範囲の重複をチェックする

SQLで日付範囲の重複をチェックする SQLで日付範囲の重複をチェックする必要が出たので調査しまし

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

SQLServerのエラーコード一覧

SQLServerで発生するエラーコードとその内容を表にしてみました。

SQLServerで自動で連番を設定する

カラムに自動で連番を設定する 自動で連番を設定し、レコードを管理する

SQLServer上にあるストアドプロシージャーの更新日時を取得する。

ストアドプロシージャーの更新日時を取得する ここ数日間で変更されたS

テーブルにユニークインデックス(UNIQUE INDEX)を作成する

テーブルにユニークインデックス(UNIQUE INDEX)を作成

SELECTでUNIONは複数個使える

SELECTでの複数のUNIONの使い方 SELECTでUNIONは

→もっと見る



PAGE TOP ↑