SQL Server - 現在のシステム日時・年月日・時刻を取得する

現在の日時を取得するには、CURRENT_TIMESTAMP や SYSDATETIME() を使用します。

現在のシステム日時を取得する方法

SELECT CURRENT_TIMESTAMP    --結果 = 2020-07-27 10:00:06.527
SELECT GETDATE()            --結果 = 2020-07-27 10:00:06.527
SELECT SYSDATETIME()        --結果 = 2020-07-27 10:00:06.5297366
SELECT SYSDATETIMEOFFSET()  --結果 = 2020-07-27 10:00:06.5297366 +09:00
SELECT GETUTCDATE()         --結果 = 2020-07-27 01:00:06.527
SELECT SYSUTCDATETIME()     --結果 = 2020-07-27 01:00:06.5297366

実行結果

現在のシステム年月日を取得する方法

SELECT CAST(CURRENT_TIMESTAMP as date)    --結果 = 2020-07-27
SELECT CAST(GETDATE() as date)            --結果 = 2020-07-27
SELECT CAST(SYSDATETIME() as date)        --結果 = 2020-07-27
SELECT CAST(SYSDATETIMEOFFSET() as date)  --結果 = 2020-07-27  ※タイムゾーンは失われます
SELECT CAST(GETUTCDATE()  as date)        --結果 = 2020-07-27
SELECT CAST(SYSUTCDATETIME() as date)     --結果 = 2020-07-27

実行結果

現在のシステム時刻を取得する方法

SELECT CAST(CURRENT_TIMESTAMP as time)    --結果 = 10:00:06.5270000
SELECT CAST(GETDATE() as time)            --結果 = 10:00:06.5270000
SELECT CAST(SYSDATETIME() as time)        --結果 = 10:00:06.5297366
SELECT CAST(SYSDATETIMEOFFSET() as time)  --結果 = 10:00:06.5297366 ※タイムゾーンは失われます
SELECT CAST(GETUTCDATE()  as time)        --結果 = 01:00:06.5270000
SELECT CAST(SYSUTCDATETIME() as time)     --結果 = 01:00:06.5297366

実行結果

SQL Server では次の関数・変数が利用できます。

関数・変数名 戻り値の型 特徴 実行結果
CURRENT_TIMESTAMP datetime ANSI SQL 互換。GETDATE() と同じ動作。 2020-07-27 10:00:06.527
GETDATE() datetime CURRENT_TIMESTAMP の SQL Server版。 2020-07-27 10:00:06.527
SYSDATETIME() datetime2 GETDATE()よりも精度が高い。 2020-07-27 10:00:06.5297366
SYSDATETIMEOFFSET() datetimeoffset タイム ゾーン オフセットを含む。 2020-07-27 10:00:06.5297366 +09:00
GETUTCDATE() datetime UTC(協定世界時)を返す。 2020-07-27 01:00:06.527
SYSUTCDATETIME() datetime2 UTC(協定世界時)を返す。GETUTCDATE()よりも精度が高い。 2020-07-27 01:00:06.5297366
SYSDATETIME() / SYSDATETIMEOFFSET() / SYSUTCDATETIME() の精度は最大100ナノ秒ですが、SQL Serverの実行されているハードウェア、OSに依存します。

datetime / datetime2 / datetimeoffset の違い

datetime datetime2 datetimeoffset
期間 1753年01月01日 ~ 9999年12月31日 0001年01月01日 ~ 9999年12月31日 0001年01月01日 ~ 9999年12月31日
時間の範囲 00:00:00 ~ 23:59:59.997 00:00:00 ~ 23:59:59.9999999 00:00:00 ~ 23:59:59.9999999
タイム ゾーンのオフセット範囲 なし なし -14:00 ~ +14:00
ストレージ サイズ 8byte 6byte ~ 8byte 10byte
精度 .000、.003、または .007 秒単位に丸められる 100 ナノ秒 100 ナノ秒

どの関数・変数を使用する?

SQLServer以外のデーターベースとの互換性を重視 CURRENT_TIMESTAMP
古いSQLServerを考慮 GETDATE()
高い精度が必要 SYSDATETIME()
時差の考慮が必要 SYSDATETIMEOFFSET()
UTC(協定世界時)で取得したい GETUTCDATE() or SYSUTCDATETIME()

検証環境

関連ページ