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

関連記事

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

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

記事を読む

SQLServer

SQLServerで引数の順序を考慮せずに呼び出せるストアドプロシジャを作る

引数の順序を考慮せずに呼び出せるストアドプロシジャ ストアドプロシジャを呼び出す際に、引数が多いも

記事を読む

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

指定した列名を利用しているテーブルを検索 SQLServerで指定した列名がどのテーブルで使用され

記事を読む

ALTER TABLE ADDでテーブルにカラムを追加する

SQL Serverでテーブルにカラムする SQL Serverでテーブルにカラムを追加します。

記事を読む

ストアドプロシジャ内で例外エラーが発生した行番号を取得する。

例外エラーが発生した行番号を取得する SQLServerのストアドプロシジャ内で例外エラーが発

記事を読む

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

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

記事を読む

SELECTでUNIONは複数個使える

SELECTでの複数のUNIONの使い方 SELECTでUNIONは複数個、連続して使えるようです

記事を読む

SQLServerでsp_renameを使ってテーブルの列名を変更する

SQLServerで列名を変更するには sp_renameを使って列名を変更 SQLServ

記事を読む

SQLで前の行と同じ値は表示しないようにする

前の行と同じ値は表示しない SQLで前の行と同じ値は表示しないようにするして 伝票印刷のような処

記事を読む

SQLサーバ

連番中で 「歯抜け」の番号を見つけ出すSQL

テーブル内の連番の歯抜け番号を探す よくある処理でテーブルに設定されている連番の中で 「歯抜け」

記事を読む

Message

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

*

sp_pkeys – SQL Serverでテーブルのプライマリキーを取得する

sp_pkeysを使ってSQL Serverでテーブルのプライマリキー

テーブル型を戻り値とする関数の作成方法

SQLServerでテーブル型を戻り値とする関数を作る SQLSer

Transact-SQLで日本語を(2バイト文字)を含むデータの扱い

Transact-SQLで日本語を(2バイト文字)を含むデータをそのま

再帰SQLで歯抜けの日付データを取得する

再帰SQLを使って歯抜けの日付データを取得 処理が自動実行(バッチ処

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

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

→もっと見る



PAGE TOP ↑