SQL Serverを使っていて、伝票や請求情報、申請情報などを抽出するときに先月、翌月、月初、月末で検索したいときがある。その方法をなるべくわかりやすく解説する。
@TODAY = '2015/02/27'
-- 先月
SELECT DATEADD(MONTH, -1, @TODAY)
-- 翌月
SELECT DATEADD(MONTH, 1, @TODAY)
-- 月初 → 2015/02/01
SELECT DATEADD(DAY, 1-DATEPART(DAY, @TODAY), @TODAY)
-- 月末
SELECT DATEADD(DAY,-1,DATEADD(MONTH,1,DATEADD(DAY,1-DATEPART(DAY,@TODAY),@TODAY)))
先月と翌月の求め方は簡単で、DATEADD関数を使う。
第1引数がdatepart(YEAR、MONTH、DAY、HOURなど)を指定する。
第2引数が日付に対してどれだけ加算するかを指定する。
第3引数が基準となる日付。今回はTODAYという変数を使っているが、GETDATE関数を使えば今日のシステム日付が取得できる。
月初の求め方
- 基準日は2015/02/27とする
- DATEPART関数で基準日の「日にち」を取得する
- DATEPART(DAY, @TODAY) → 27日
- 1から「日にち」を減算して何日前が1日(月初)なのか取得する
- 1 - DATEPART(DAY, @TODAY) = 1 - 27 → -26日
- DATEADD関数を使って、月初までの日にちを減算する
- DATEADD(DAY, -26, @TODAY) → 基準日から26日前 → 2015/02/01
月末の求め方
- 基準日は2015/02/27とする
- DATEPART関数で基準日の「日にち」を取得する
- DATEPART(DAY, @TODAY) → 27日
- 1から「日にち」を減算して何日前が1日(月初)なのか取得する
- 1 - DATEPART(DAY, @TODAY) = 1 - 27 → -26日
- DATEADD関数を使って、月初までの日にちを減算する
- DATEADD(DAY, -26, @TODAY) → 基準日から26日前 → 2015/02/01
- DATEADD関数を使って、翌月を取得する
- DATEADD(MONTH, 1, '2015/02/01') → 2015/03/01
- DATEADD関数を使って、1日前の日付(基準日の月末)を取得する
- DATEADD(DAY, -1, '2015/03/01') → 2015/02/28
先月、翌月、月初、月末の日付の求め方がわかれば、あとは翌月の月初や先月の月末などが取得できる。
参考サイト
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿