2017/03/14

SQL Serverで先月、翌月、月初、月末の日付の求め方を解説する

SIer時代のメモを発掘したので、せっかくなので共有のためにここにまとめる。

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関数を使えば今日のシステム日付が取得できる。



月初の求め方

  1. 基準日は2015/02/27とする
  2. DATEPART関数で基準日の「日にち」を取得する
    • DATEPART(DAY, @TODAY)  → 27日
  3. 1から「日にち」を減算して何日前が1日(月初)なのか取得する
    • 1 - DATEPART(DAY, @TODAY) = 1 - 27 → -26日
  4. DATEADD関数を使って、月初までの日にちを減算する
    • DATEADD(DAY, -26, @TODAY) → 基準日から26日前 → 2015/02/01

月末の求め方

  1. 基準日は2015/02/27とする
  2. DATEPART関数で基準日の「日にち」を取得する
    • DATEPART(DAY, @TODAY)   → 27日
  3. 1から「日にち」を減算して何日前が1日(月初)なのか取得する
    • 1 - DATEPART(DAY, @TODAY) = 1 - 27 → -26日
  4. DATEADD関数を使って、月初までの日にちを減算する
    • DATEADD(DAY, -26, @TODAY)  → 基準日から26日前 → 2015/02/01
  5. DATEADD関数を使って、翌月を取得する
    • DATEADD(MONTH, 1, '2015/02/01')  → 2015/03/01
  6. DATEADD関数を使って、1日前の日付(基準日の月末)を取得する
    • DATEADD(DAY, -1, '2015/03/01')  → 2015/02/28


先月、翌月、月初、月末の日付の求め方がわかれば、あとは翌月の月初や先月の月末などが取得できる。



参考サイト





以上

written by @bc_rikko

0 件のコメント :

コメントを投稿