連載
» 2007年04月23日 00時00分 公開

さらっと覚えるSQL&T-SQL入門(3):関数を使ってSELECT文をパワーアップさせる (2/3)

[石橋潤一,株式会社システムインテグレータ]

日付関数

 日付関数は、その名のとおり日付型の値を扱うための関数です。現在のシステム日付を求めたり、2つの日付から差を算出、あるいは日付の足し算を行うといったことが可能です。また、日付関数はWHERE句の中でも利用できるため、検索条件としても活用できます。日付関数は日付型の値を扱う際に非常に使い勝手がよいため、その動作を確認しておきましょう。

 日付関数には、主に次のような関数が存在します。

  • GETDATE  システム日時を取得
  • DATEADD  日付値に対する加算
  • DATEDIFF  2つの日付値の差を取得
  • YEAR    指定の日付から年を取得
  • MONTH   指定の日付から月を取得
  • DAY     指定の日付から日を取得
  • DATEPART  日付の中から特定の要素を取得

 それでは、それぞれの関数について具体的な利用法を確認しましょう。

GETDATE

 GETDATE関数は、現在のシステム日時を取得するための関数です。実行するたびに、値が更新され現在日時が表示されます。

 具体的な利用法は次のような形です。

SELECT COUNT(*) 売上件数,GETDATE() データ取得日時 
  FROM Sales.SalesOrderHeader
 
売上件数   データ取得日時
-------------------------
31465     2007-04-11 21:43:39.597

DATEADD

 DATEADD関数は、与えられた日付値に対して、加算を行います。日付を構成する値として、年月日、秒、曜日、といった要素が考えられますが、加算を行う際は、どのような要素に対して加算を行うのか、パラメータを指定します。DATEADD関数は次のような構文で利用します。

DATEADD(datepart,加算値,日付)


 datepartは日付に対して加算する際に指定するパラメータです。パラメータには次のようなものが存在します。

datepart 省略名
year yy、yyyy
month mm、m
day dd、d
weekday dw、w
hour hh
minute mi、n
second ss、s

 次の例では、システム日付から30日後の日付を求めています。

SELECT DATEADD(d,30,GETDATE()) 日付加算結果
 
日付加算結果
---------------------------
2007-05-11 21:55:10.000

DATEDIFF

 DATEDIFF関数は、2つの日付値から差異を求める際に利用します。DATEDIFF関数は、DATEADD関数と同じくパラメータを利用し、差異をどのような値で返すかを指定します。4月11日から6月3日が何週間離れているか、といった計算を行うことができます。

 次の例では、OrderDate列の値とシステム日付の差が1000未満の行を表示しています。

SELECT SalesOrderID FROM Sales.SalesOrderHeader 
  WHERE DATEDIFF(d,OrderDate,GETDATE()) < 1000
 
SalesOrderID
----------
74619
74620
74621

YEAR/MONTH/DAY

 YEAR/MONTH/DAY関数は、与えられた日付から年月日の要素を取り出すために使用します。

 次の例では、システム日付より、それぞれ年月日を求めています。

SELECT YEAR(GETDATE()) システム年,
       MONTH(GETDATE()) システム月,
       DAY(GETDATE()) システム日
 
システム年    システム月    システム日
-----------------------------------
2007         4           11

DATEPART

 DATEPART関数は、日付から特定の値要素を取得する際に利用します。DATEADD関数やDATEDIFF関数と同じくパラメータを使用し、抜き出す値を指定します。YEAR/MONTH/DAY関数と同じ結果をDATEPART関数でも得られます。

 次の例では、システム日付より、それぞれ年月日を求めています。

SELECT DATEPART(yy,GETDATE()) システム年,
       DATEPART(mm,GETDATE()) システム月,
       DATEPART(dd,GETDATE()) システム日
 
システム年   システム月    システム日
-----------------------------------
2007        4            11

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。