指定された月の日数を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

関連記事

DATENAME関数を使って日付を取得する。

DATENAME関数を使って日付取得 SQLServerでDATENAME関数を使って日付を取得し

記事を読む

NULLの検索はIS NULL演算子を使う

SQLでNULLのカラムを検索 SQLでNULLのカラムを検索するにはIS NULL 演算子を

記事を読む

SQLで西暦から和暦変換を行う

SQLを使って西暦から和暦変換を行う SQLServerには西暦和暦変換関数が無いようなので、

記事を読む

SQLServer

SQLServerでストアドプロシージャ名を取得する

SQLServerでストアドプロシージャ名を取得する ストアドプロシージャ名を取得する エラ

記事を読む

「INNER JOIN」「LEFT OUTER JOIN」「RIGHT OUTER JOIN」「FULL OUTER JOIN」についてまとめ

SQLで良く使うJOINについて SQLでよく使う「INNER JOIN」「LEFT OUTE

記事を読む

Transact-SQLで動的にSQLを編集してカーソルを使用する

2時間もハマったのでメモ書きとして記述します。 Transact-SQLで動的にSQLを編集し

記事を読む

SQLServer

指定した値と同じ場合はNULLを返すNULLIF関数

使いどころがいまいち不明な「NULLIF()」 SQLServerには使いどころがいまいち不明な関

記事を読む

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

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

記事を読む

集計関数COUNT()でのNULLの扱い

集計関数COUNT()でのNULLの扱いは注意が必要 集計関数のCOUNT()は条件にマッチす

記事を読む

SQLServerで省略可能な引数を持ったストアドプロシージャを作る

SQLServerで省略可能な引数を持ったストアドプロシージャーを作ります。 省略可能にするに

記事を読む

Message

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


*

ALTER TABLEで既存のテーブルのプライマリーキー(主キー)を変更する

ALTER TABLEで既存のテーブルのプライマリーキー(主キー)を変

SQLServer
SQLServerで取得した値を3ケタずつのカンマ区切りの表示に変更する方法です

SQLServerで取得した値を3ケタずつのカンマ区切りの表示に変更す

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

SQLServerでテーブルやカラムにコメントをつける SQLSer

指定した列名がどのテーブルで使用されているか検索するSQL

指定した列名を利用しているテーブルを検索 SQLServerで指定し

@@ROWCOUNTで処理した件数を取得する

@@ROWCOUNTは直前に処理した件数を取得するための関数 SQL

→もっと見る



PAGE TOP ↑