実行日を基準に特定の日付を取得する
SQL Serverでクエリ実行日を基準日として特定の日付を取得する方法です。
コード
--抽出月の前月1日
CONVERT(NVARCHAR,DATEADD(MM,DATEDIFF(MM,0,GETDATE())-1,0),112)
--抽出月の前月末日
CONVERT(NVARCHAR,DATEADD(MM,DATEDIFF(MM,0,GETDATE()),-1),112)
--抽出月の前月から1年前の1日
CONVERT(NVARCHAR,DATEADD(MM,DATEDIFF(MM,0,GETDATE())-12,0),112)
##解説
コードの意味を解説していきます。
GETDATE関数:今日の日付を取得
GETDATE()
DATEDIFF関数:2つの日付の差分を取得する
---DATEDIFF(datepart, startdate, enddate)
DATEDIFF('MM',-1,GETDATE())
datepartは
yy:年
MM:月
dd:日
等を指定します。
startdateに数値を入れると基準日(1900年1月1日)からの差で日付指定できる。例)-1は1989年12月31日
DATEADD関数:日付を加える
--DATEADD(datepart, number, date)
--前月1日
DATEADD(MM,DATEDIFF(MM,0,GETDATE())-1,0)
--前月末日
DATEADD(MM,DATEDIFF(MM,0,GETDATE()),-1)
--前月から1年前の1日
DATEADD(MM,DATEDIFF(MM,0,GETDATE())-12,0)
CONVERT関数:日付を文字列に変換する
--CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
CONVERT(NVARCHAR,DATEADD(MM,DATEDIFF(MM,-1,GETDATE())-1,-1),112)
styleの112はyyyymmdd形式に変換の意味。その他の形式は下記を参照
https://docs.microsoft.com/ja-jp/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15