• 検索結果がありません。

STEP 6. 関数

6.1 日付と時刻に関する関数

日付と時刻に関する関数

SQL Server には、日付と時刻を操作するための関数として、主に次のものが用意されています。

Let's Try

それでは、これを試してみましょう。ここでは、STEP4 で利用したのと同じ「sampleDB」デー タベース内の「emp」テーブル(以下のデータ)を利用して、関数を試してみましょう。

GETDATE で現在の日付と時刻を取得

関数 役割

GETDATE 現在の日付と時刻を取得(datetimeデータ型対応)

CURRENT_TIMESTAMPと記述しても可 SYSDATETIME GETDATEのdatetime2データ型対応版 SYSDATETIMEOFFSET GETDATEのdatetimeoffsetデータ型対応版 YEAR 日付から年を取得(結果はint型)

MONTH 日付から月を取得(結果はint型)

DATEPART 日付/時刻から指定した部分を取得(結果はint型)

DATEADD 日付/時刻の加算を行う

DATEDIFF 日付/時刻の差を取得

EOMONTH 月末の取得

DATEFROMPARTS 文字列からの日付データの作成

FORMAT 日付データの書式の変更

2. 次に、GETDATE 関数を利用して「現在の日付と時刻」を取得し、それを「emp」テーブル の「hiredate」(入社日)列へ格納してみます。

INSERT INTO emp

VALUES (12, 'yyy', 9999, GETDATE(), 20) SELECT * FROM emp WHERE empno = 12

現在の日付と時刻が、「hiredate」列へ格納されていることを確認できます。

YEAR 関数で年のみを取得

1. 次に、YEAR 関数を利用して、「hiredate」(入社日)列の “年だけ” を取得してみます。

SELECT YEAR(hiredate), * FROM emp

このように YEAR 関数を利用すると、「1998」や「1999」など年だけを取得できるようにな ります。なお、取得した年は、int(4バイト整数)型です。

YEAR(hiredate)によって 入社日のうちの"年" を取得

MONTH 関数で月のみを取得

1. 次に、MONTH 関数を利用して、「hiredate」(入社日)列の “月だけ” を取得してみます。

SELECT MONTH(hiredate), * FROM emp

このように MONTH 関数を利用すると、月だけを取得できるようになります。また、YEAR 関 数と同様、取得した値は int 型です。

DATEPART による日付と時刻の部分取得

YEAR と MONTH 関数は、年と月の取得でしたが、DATEPART 関数を利用すると、日付と時刻

の任意の一部分を取得できるようになります。Part は「部分」「一部」という意味です。構文は、

次のとおりです。

DATEPART( datepart, 日付 )

第 1 引数の datepart を、「year」と指定すれば "年" を取得でき、YEAR 関数と同じ結果を取 得できます。また、「month」とすれば "月" で MONTH 関数と同じ結果、「day」と指定すれば

“日” 、「hour」と指定すれば “時間”、「minute」と指定すれば “分” を取得できるようになりま す。

それでは、これを試してみましょう。

1. DATEPART 関数を利用して、「emp」テーブルの「hiredate」から "日" と "時間" を取り

MONTH(hiredate)によって 入社日のうちの"月" を取得

このように DATEPART 関数を利用すると、日付と時刻の任意の一部分を取得できるように なります。

Note: DATEPART 関数で指定できるそのほかの datepart

DATEPART 関数の第 1引数(datepart)には、ほかにも指定できるものがあります。例えば、「dayofyear」で

“その年の 1月 1日から数えた日にち” 「week」で “その年の何週目か” などを取得できます。これらの詳細は、

SQL Server 2012 のオンライン ブック(Books Online)の以下のトピックへ詳しく記載されています。

「SQL Server データベース エンジン」→「Transact-SQL リファレンス」

→「組み込み関数」→「日付と時刻のデータ型および関数」→「DATEPART」

DATEADD による日付の加算と減算

DATEADD 関数を利用すると、日付と時刻の任意の部分で加算と減算を行えるようになります。

構文は、次のとおりです。

DATEADD( datepart, 数値,日付)

第 1引数の datepart は、DATEPART 関数のときと同じように、「year」や「month」など加算 や減算の対象にしたいものを指定します。第 2引数の数値は、第3 引数に対して加算または減算 したい値を指定します。減算の場合は、マイナス付きの数値を記述します。

それでは、これを試してみましょう。

DATEPART(day, hiredate) DATEPART(hour, hiredate)

1. まずは、「emp」テーブルの「hiredate」(入社日)列へ「10 年加算」した値を取得してみ ます。

SELECT DATEADD(year, 10, hiredate), * FROM emp

第 1引数へ “year”、 第 2引数へ “10” を指定することで、hiredate(入社日)の “年” に 対して “+10” した結果を取得することができます。

2. 次に、DATEADD 関数を WHERE 句で利用してみましょう。次のように記述して、“現在、入

社してから 10 年以上経っている社員” を取得してみます。

SELECT * FROM emp

WHERE DATEADD(year, 10, hiredate) < GETDATE()

このように関数は、WHERE 句の条件式で利用することもできます。

DATEADD(yaer, 10, hiredate) で入社日の"年" に+10 加算

1. 「emp」テーブルの「hiredate」(入社日)列の月末を取得してみます。

SELECT EOMONTH(hiredate), hiredate FROM emp

「emp」テーブルの「hiredate」列の月末を取得できたことを確認できます。

DATEFROMPARTS で文字列から日付データを作成

DATEFROMPARTS 関数は、SQL Server 2012 からサポートされた関数で、文字列から日付デ ータを作成することができます。構文は、次のとおりです。

DATEFROMPARTS( '年', '月', '日')

第 1引数には年となる値、第2引数には月となる値、第3引数には日となる値をそれぞれ記述し ます。

それでは、これを試してみましょう。

1. 「2012」と「12」、「12」という文字列から日付を作成してみます。

SELECT DATEFROMPARTS('2012', '12', '12')

「2012」と「12」、「12」から「2012/12/12」(date型の日付)を作成できたことを確認 できます。DATEFROMPARTS は、Parts(パーツ)From(から)date 型を作成するという 意 味 で す 。 他 の 日 付 デー タ 型 を 作 成 で き る 関数 も 用 意 さ れ て い て 、datetime 型 の

「DATETIMEFROMPARTS」、smalldatetime型の「SMALLDATETIMEFROMPARTS」、

datetime2型の「DATETIME2FROMPARTS」、datetimeoffset型の「DATETIMEOFFSET FROMPARTS」などがあります。

FORMAT で日付データの書式を変更

FORMAT 関数も、SQL Server 2012 からサポートされた関数で、日付データの書式を変更する ことができます。構文は、次のとおりです。

FORMAT( 日付, 書式)

第 1引数には日付となる値、第2引数には変更後の書式を指定します。

それでは、これを試してみましょう。

1. 「emp」テーブルの「hiredate」列の日付データを「XXXX年XX月XX日」という形で取 得してみます。

SELECT FORMAT(hiredate, 'yyyy年MM月dd日') , hiredate FROM emp

「hiredate」列の日付データを「1998年04月01日」のような形で取得できたことを確認 できます。yyyy は 4 桁の年、MM は 2 桁の月、dd は 2 桁の日を取得するための .NET

Framework の書式指定子(書式を変更するためのキーワード)です。 FORMAT 関数で

は、.NET Framework でサポートされる書式指定子を利用してデータの書式を変更すること ができます。