まずは使えそうな関数から。
現在の日付を確認
現在の日付を返す
とりあえず現在の日時を知りたいときは
SELECT GETDATE()
日付を移動する
指定した単位分、日付を移動させる。
datapartには
単位(という表現であってるのか?)を指定する
以下、よく使いそうなものを並べてみる
(かっこ内は省略形)
・日:day(dd,d),dayofyear(dy),weekday(wd)
・月:month(mm,m) *1
・四半期:quater(qq,q)
・年:year(yy,y)
*1)戻り値が存在しない場合、戻り値の月の最後の日が帰ってくる
つまり
DATEADD(month,1,'2012/08/30')
DATEADD(month,1,'2012/08/31')
は同じ結果('2012/09/30')をかえしますよ。
SELECT DATEADD(DAY,3,GETDATE()) -- 現在から3日後の日時 SELECT DATEADD(MONTH,1,GETDATE()) --1か月後の日付 SELECT DATEADD(MONTH,1,'2012-07-31') --1か月後の日付(2012-8-31) SELECT DATEADD(MONTH,1,'2012-07-31') --2か月後の日付(2012-9-30)
日付の取り出し
それぞれ、年、月、日を返します。
DATENAME(interval, date)
DATEPART(interval, date)
両方とも特定の部分を切り出す関数です。
intervalに指定するものによって戻り値がちがってきます
・DAYOFYEAR,WEEKをしていた場合は、それぞれ年始まり(1月1日)からの日数、週数を返す
・WEEKDAYを指定した場合は、DATENAMEとDATEPARTで動きがちがって
DATEPARTでは曜日番号を返す(1=月曜日、・・・)
ここでいう四半期は1/1~3/31が1になります。
4/1~=「第一四半期」ではないので注意うっかりしないように(おもに自分が)
SELECT DATENAME(YEAR,GETDATE()), YEAR(GETDATE()) -- 年を返す(両方とも同じ値を返す) SELECT DATENAME(MONTH,GETDATE()), MONTH(GETDATE()) -- 月を返す(両方とも同じ値を返す) SELECT DATENAME(DAY,GETDATE()), DAY(GETDATE()) -- 日を返す(両方とも同じ値を返す) SELECT DATENAME(WEEKDAY,GETDATE()), DATEPART(WEEKDAY,GETDATE()) -- 1列目:今日の曜日(日本語)、2列目:週番号
日付演算には算術演算子を使わない方が無難。
理由は↓
http://japan.internet.com/developer/20071113/26.html