よく使われる日付と時刻の関数 1 - GETDATE, YEAR, MONTH, DAY, DATEPART
よく使われる日付と時刻の関数 1 - GETDATE, YEAR, MONTH, DAY, DATEPART
前回は 「 よく使われる文字列関数 3 - REPLACE, CHARINDEX, CHAR 」 で、 よく使われる SQL Server の組み込み文字列関数を使ってみました。
今回は、SQL Server のビルトインのファンクションの中から、よく使われる日付と時刻の関数の GETDATE, YEAR, MONTH, DAY, DATEPART を使ってみましょう。
こちら のスクリプトを実行して、テーブルを再生成しておいてください。 全てのテーブルは使いませんが、これらのテーブルが存在している前提で進めます。
GETDATE ファンクション
GETDATE ファンクションは、SQL Server のインスタンスを実行しているコンピューターの日時 datetime を返します。 タイムゾーンオフセットは含まれません。 構文は次の通りです。
GETDATE()
データの作成日・更新日時などを記録しておくのに便利な関数です。
SELECT GETDATE();
[ 実行結果 ]
タイムゾーンを考慮して時間の変換まで行うようなシステムを構築する場合は、タイムゾーンオフセットを含む日時や UTC 時刻を返すビルトイン関数もあるのでチェックしてみてください。
Microsoft TechNet - 日付と時刻の関数 (Transact-SQL)
YEAR, MONTH, DAY ファンクション
YEAR ・ MONTH ・ DAY ファンクションは、それぞれインプットの日付の年・月・日の部分を表す整数を返します。
それぞれの構文は次の通りです。
YEAR([日時])
MONTH([日時])
DAY([日時])
例えば、2017-07-31 22:12:33.530 の年・月・日の部分を取得するには次のようにします。
DECLARE @Input DATETIME = '2017-07-31 22:12:33.530'; SELECT YEAR(@Input) AS YEAR_Input, MONTH(@Input) AS MONTH_Input, DAY(@Input) AS DAY_Input;
[ 実行結果 ]
WHERE 句や GROUP BY 句でも使えます。
例えば、Student テーブルから誕生日の年ごとの学生数を数えるには次のようにします。
SELECT YEAR(Birthday) AS YEAR_Birthday, COUNT(*) AS COUNT_Student FROM Student GROUP BY YEAR(Birthday);
[ 実行結果 ]
DATEPART ファンクション
DATEPART ファンクションは、日付の指定した部分を表す整数を返します。
それぞれの構文は次の通りです。
DATEPART ( [部分] , [日時] )
[部分] には、次のような指定が可能です。 カッコの中のように省略して指定することも可能です。
年 - year (yy, yyyy)
月 - month (mm, m)
日 - day (dd, d)
時 - hour (hh)
分 - minute (mi, n)
秒 - second (ss, s)
曜日 - weekday (dw)
その年の何日目か - dayofyear (dy, y)
その年の何週目か - week (wk, ww)
※ よく使うものだけをピックアップしています。
例えば、2017-07-31 22:12:33.530 から、それぞれの DATEPART を取得すると、次のようになります。
DECLARE @Input DATETIME = '2017-07-31 22:12:33.530'; SELECT DATEPART(yy, @Input) AS yy_Input, DATEPART(mm, @Input) AS mm_Input, DATEPART(dd, @Input) AS dd_Input, DATEPART(hh, @Input) AS hh_Input, DATEPART(mi, @Input) AS mi_Input, DATEPART(ss, @Input) AS ss_Input, DATEPART(dw, @Input) AS dw_Input, DATEPART(dy, @Input) AS dy_Input, DATEPART(wk, @Input) AS wk_Input;
[ 実行結果 ]
DATEPART(dw, [日付]) と DATEPART(wk, [日付]) で返ってくる数字は、 DATEFIRST で何曜日が 1 になるように設定されているかによって違います。
例えば、U.S. English 場合は、DATEFIRST は 7 の日曜日がデフォルトで日曜日から 1 とカウントするので、、2017 年 7 月 31 日は月曜日なので 2 が返ってきます。
DATEFIRST に、何が設定されているかは @@DATEFIRST を SELECT や PRINT することで確認でき、SET DATEFIRST [1 ~ 7 の数字] で変更可能です。
SELECT @@DATEFIRST;
[ 実行結果 ]
曜日に変換して、処理する際は DATEFIRST が何になっているか気をつけて処理してくださいね。
次は、よく使われる日付と時刻の関数の DATEADD, DATEDIFF, ISDATE を使ってみましょう。