続けて、日付型の一部を取り出す方法と、日付時刻の計算をする方法について見ていきましょう。

日付時刻の一部を取り出す関数、計算を行う関数一覧

関数名 戻り値 説明
YEAR int 年を取り出します
MONTH int 月を取り出します
DAY int 日を取り出します
DATENAME nvarchar 日付から特定の部分(年月日時分秒等)を取り出して文字列で返します
DATEPART int 日付から特定の部分(年月日時分秒等)を取り出して数値で返します
DATEADD date(入力値依存) 日付に期間を加算して返します
DATEDIFF int 2つの日付間の差を、指定した単位で返します

年月日の取り出し(YEAR、MONTH、DAY)

日付型から年月日を取得するには、YEAR関数、MONTH関数、DAY関数を使用します。

YEAR関数、MONTH関数、DAY関数の実行例


SELECT YEAR('2008-02-28') /* → 2008 (年) */
SELECT MONTH('2008-02-28') /* → 2 (月) */
SELECT DAY('2008-02-28') /* → 28  (日)*/

特定部分の取り出し(DATENAME、DATEPART)

日付型から特定の部分を取り出すには、DATENAME関数、DATEPART関数を使用します。第1引数には、取り出す対象期間を設定します。第1引数に指定できる文字列には次のようなものがあります。

日付型関数で使用できる日付時刻の部分名称

意味 正式形 省略形
year yy, yyyy
四半期 quarter qq, q
month mm, m
その年の日付 dayofyear dy, y
day dd, d
week wk, ww
曜日 weekday dw, w
hour hh
minute mi, n
second ss, s
ミリ秒 millisecond ms
マイクロ秒 microsecond mcs
ナノ秒 nanosecond ns

DATENAME関数は結果を文字列で返し、DATEPART関数は結果を数値型で返します。

DATENAME関数、DATEPART関数の実行例


--任意の部分を抽出(文字列)
SELECT DATENAME(year , '2008-02-28') /* → 2008 (年) */
SELECT DATENAME(quarter , '2008-02-28') /* → 1 (四半期) */
SELECT DATENAME(month , '2008-02-28') /* → 02 (月) */
SELECT DATENAME(dayofyear , '2008-02-28') /* → 59 (年での日数) */
SELECT DATENAME(day , '2008-02-28') /* → 28 (日) */
SELECT DATENAME(week , '2008-02-28') /* → 9 (年での週) */
SELECT DATENAME(weekday , '2008-02-28') /* → 木曜日 (曜日) */
SELECT DATENAME(hour , '2008-02-28 12:34:56') /* → 12 (時)*/
SELECT DATENAME(minute , '2008-02-28 12:34:56') /* → 34 (分)*/
SELECT DATENAME(second , '2008-02-28 12:34:56') /* → 56 (秒)*/
SELECT DATENAME(millisecond , '2008-02-28 12:34:56.123') /* → 123 (ミリ秒)*/

--任意の部分を抽出(数値型)
SELECT DATEPART(year , '2008-02-28' ) /* → 2008 (年) */
SELECT DATEPART(month , '2008-02-28' ) /* → 2 (月) */

日付型の加算、減算、差分(DATEADD、DATEDIFF)

期間の加減算を行うにはDATEADD関数を使用します。期間の差分を求めるにはDATEDIFF関数を使用します。共に第1引数として、計算対象部分の名称を指定します。

DATEADD関数、DATEDIFF関数の実行例


--加算
SELECT DATEADD(month, 1, '2008-12-01')
/* → 2009-01-01 (1カ月後) */

--減算
SELECT DATEADD(day, -1, '2008-12-01')
/* → 2008-11-30 (1日前) */

--差分
SELECT DATEDIFF(day, '2008-10-31','2008-11-01')
/* → 1 (1日差)*/

SELECT DATEDIFF(hour, '2008-11-01','2008-10-31')
/* → -24 (-24時間差)*/