SQL Server

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

投稿日:2013/12/02 更新日:

指定された月の日数を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」がありえる処理の場合はチェックする処理が
必要になります。

当サイトのおすすめ記事

レンタルサーバー 1

当サイトは約5年間、さくらのレンタルサーバで運用させて頂きました。 何かトラブルがあったわけではないのですが、WordPressの表示速度を速くしたくてSSD搭載のレンタルサーバーで運用してみることに ...

プログラミング 2

SQLでIFを使わずに条件分岐する SQLでIFを書けばWHERE句の内容を変えて検索できますが、条件ごとに同じようなSQLを 複数回書くのは面倒なので、1行で分岐できないかと言う事でSQLを作って見 ...

SQLServer 3

SQLServerで発生するエラーコードをSQLで取得する SQLServerで発生したエラーコードの内容を メッセージが定義されているテーブルから取得します。 エラーコードを取得するSQL SQLs ...

4

SQLServerでテーブル型を戻り値とする関数を作る SQLServerではINT型やVARCHAR型などを返す関数と同様に ユーザー定義テーブル型を戻り値とする関数を作成できます。 テーブル型を戻 ...

5

アフィリエイトで即効成果を出す アフィリエイトで成果を出す、なかなか難しいですよね。 サイトをいくつも立ち上げてすでにコツをつかんでいる人なら チョチョイっとやっていけるんでしょうけど。 でも実際はこ ...

-SQL Server
-,

Copyright© ソフトウェア開発日記 , 2017 AllRights Reserved.