- Home
- SQL Server
- 当月末日、当月初日、先月末日をSQLで求める
当月末日、当月初日、先月末日をSQLで求める
- 2016/5/19
- SQL Server
- コメントを書く
SQLで月の末尾を求める方法。
SQLで当月末日、当月初日、先月末日を求める。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
DECLARE @value date = '2016/02/15' --基準となる日付 DECLARE @inc int -- 増分値 DECLARE @last_month_end date -- 先月の末尾 DECLARE @this_month_end date -- 基準となる日付の月の末尾 DECLARE @this_month_start date -- 基準となる日付の1日 --(1)日付から日の値のみ取得してマイナス1をかける --例だと「-15」となる --これを増分値とする select @inc = DAY(@value) * - 1 --(2)日付を加算する関数で(1)を増減値とすると、 --前月の末尾が求まる select @last_month_end = DATEADD(day,DAY(@value) * - 1 ,@value) --(3)前月の末尾にひと月を加算 --これが基準日付の末日になる select @this_month_end = DATEADD(month,1,DATEADD(day,DAY(@value) * - 1 ,@value)) --(4)前月の末尾に1日を加算 --これが基準日付の1日となる select @this_month_start = DATEADD(day,1,DATEADD(day,DAY(@value) * - 1 ,@value)) print @value print @inc print @last_month_end print @this_month_end print @this_month_start |
この結果は、
2016-02-15(基準日)
-15(基準日から日付を取り出したもの)
2016-01-31(前月末日)
2016-02-29(当月末日)
2016-02-01(当月初日)
※これ、思ったのだが、基準日から当日を取り出した増減値を+1にしたら、簡単に当月末尾が取り出せないか?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
DECLARE @value date = '2016/02/15' --基準となる日付 DECLARE @inc int -- 増分値 DECLARE @this_month_end date -- 基準となる日付の月の末尾 DECLARE @this_month_start date -- 基準となる日付の1日 --(1)日付から日の値のみ取得してマイナス1をかけて1を引く --例だと「-14」となる --これを増分値とする select @inc = DAY(@value) * - 1 + 1 --(2)日付を加算する関数で(1)を増減値とすると、 --当月の初日が求まる select @this_month_start = DATEADD(day,DAY(@value) * - 1 + 1 ,@value) --(3)当月の初日にひと月を加算して1日減らすと --これが当月の末日になる select @this_month_end = DATEADD(day, - 1,DATEADD(month,1,DATEADD(day,DAY(@value) * - 1 + 1 ,@value))) print @value print @inc print @this_month_start print @this_month_end |
この結果は
2016-02-15(基準日)
-14(増分値)
2016-02-01(基準日の1日)
2016-02-29(基準日の末日)
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。