ITコーディネータのシュウです。
先週末の雨と風で桜が結構散ってしまいましたね。これはその前に撮った家の近くの庁舎にある桜の写真です。
4月に入り、子供たちもいよいよ始業式、入学式の時期になりました。わが家も子供たちが学校へ行く準備で慌ただしくしている朝の日々が戻ってきました。
朝になって、子供たちからあれがない、これがない、これを準備して!とか言われると本当に大変ですよね。前の日の夜に次の日の準備をしっかりさせるように躾けることが大事だとつくづく感じます。
<本日の題材> 日付関数についての続き
前回、日付型関数について少し話をしましたが、日付の計算などについて今回は見てみたいと思います。
① 何日後・何日前など、日にちを足し引きする場合:
Oracle:
DATE型の項目に対して、足し引きしたい日数を単純にプラス 、マイナスすればよい。
SQL Server:
DATEADD関数 (構文:DATEADD(datepartパラメータ, number, date) )でパラメータに dayを使用する。
※追記)
Oracleと同様に、足し引きしたい日数をプラスマイナスも可能です。ただし、Oracleの場合は、日数だけでなく、時間・分・秒なども 1/24 、1/24/60、1/24/60/60 などを足し引きすることで計算が可能ですが、SQL Serverでは日数までです。
例)購入日(DATE型)の7日後、7日前
Oracle:
SELECT 購入日
, 購入日+7 AS 購入日の7日後
, 購入日-7 AS 購入日の7日前
FROM テーブル名;
購入日が ’2014-03-25’ だった場合、結果は以下のようになる:
購入日 購入日の7日後 購入日の7日前
----------------- ------------------- --------------------
14-03-25 14-04-01 14-03-18
SQL Server:
SELECT 購入日
, DATEADD(day, 7, 購入日) AS 購入日の7日後
, DATEADD(day, -7, 購入日) AS 購入日の7日前
FROM テーブル名;
※Oracleと同様の、+7、-7 などの計算も可能です。
② 何か月後・何か月前など、月数を足し引きする場合:
Oracle:
ADD_MONTHS関数(構文:ADD_MONTHS (date型項目, integer) )。
SQL Server:
DATEADD関数(構文:DATEADD(datepartパラメータ, number, date型項目) )でパラメータに month を使用する。
例)購入日(DATE型)の月末日の1ヶ月後、1ヶ月前
Oracle:
SELECT LAST_DAY(購入日) AS 購入日の月末日
, LAST_DAY(ADD_MONTHS(購入日,1)) AS 購入日の翌月末日
, LAST_DAY(ADD_MONTHS(購入日,-1)) AS 購入日の前月末日 FROM テーブル名;
購入日が ’2014-03-25’ だった場合、結果は以下のようになる:
購入日の月末日 購入日の翌月末日 購入日の前月末日
-------------------- ---------------------- -----------------
14-03-31 14-04-30 14-02-28
SQL Server (2012):
SELECT EOMONTH(購入日) AS 購入日の月末日
, EOMONTH(DATEADD(month, 1,購入日)) AS 購入日の翌月末日
, EOMONTH(DATEADD(month, -1,購入日)) AS 購入日の前月末日 FROM テーブル名;
※ただし、上記の月末日を取得する EOMONTH関数は、SQL Server2012から使える機能です。それ以前の場合には、翌月1日から1日引いた日付を取得するかたちが一般的ですね。いろいろな書き方があると思いますが、例えば以下のような文で今月の月末日を抽出できます。
SELECT DATEADD(DAY,-1,DATENAME(YEAR,DATEADD(MONTH,+1,GETDATE())) + '-' + DATENAME(MONTH,DATEADD(MONTH,+1,GETDATE())) + '-' + '01') as 当月末
★前回と同様、EXCELからデータをアクセスできる環境であれば、EXCELのほうで月末日を取得する関数(EOMONTH関数)があるので、EXCEL側で月末日を表示させることが簡単にできます。
今日は以上まで
にほんブログ村