続けて、日付型の一部を取り出す方法と、日付時刻の計算をする方法について見ていきましょう。
日付時刻の一部を取り出す関数、計算を行う関数一覧
関数名 | 戻り値 | 説明 |
---|---|---|
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時間差)*/