SQL Server 現在日時を取得する: GETDATE, SYSDATETIME

SQL Server 現在日時を取得する: GETDATE

SQL Server で、現在の日付・時刻を取得したい場合は、以下の関数で取得します。

GETDATE(). SYSDATETIME(), CURRENT_TIMESTAMP

現在のUTCの日時を取得したい場合は、以下の関数で取得します。
GETUTCDATE(), SYSUTCDATETIME()

タイム ゾーン オフセットが含まれる日時を知りたい場合は、以下の関数で取得します。
SYSDATETIMEOFFSET()

ちなみに、現在の日時と言っても実際には、SQL Servar が動いているサーバーのシステム日時を取得します。

GETDATE(). SYSDATETIME(), CURRENT_TIMESTAMP

各々、現在のデータベース システムのタイムスタンプを返します。
しかし、1 秒未満の有効桁数で比較すると、SYSDATETIME の方が GETDATE よりも高い精度を得ることができます。


select SYSDATETIME() as SYSDATETIME
, GETDATE() as GETDATE
, CURRENT_TIMESTAMP as [CURRENT_TIMESTAMP]

GETDATE(). SYSDATETIME(), CURRENT_TIMESTAMPの取得結果画面

GETDATE(). SYSDATETIME(), CURRENT_TIMESTAMPの取得結果画面

GETUTCDATE(), SYSUTCDATETIME()

各々、現在のデータベース システムのUTCのタイムスタンプを返します。
しかし、1 秒未満の有効桁数で比較すると、SYSUTCDATETIME の方が GETUTCDATE よりも高い精度を得ることができます。


select SYSUTCDATETIME() as SYSUTCDATETIME
, GETUTCDATE() as GETUTCDATE

GETUTCDATE(), SYSUTCDATETIME()の取得結果画面

GETUTCDATE(), SYSUTCDATETIME()の取得結果画面

SYSDATETIMEOFFSET()

SQL Server のインスタンスを実行しているコンピューターの日付と時刻を含む タイム ゾーン オフセットが含まれる 値を返します。


select SYSDATETIMEOFFSET() as SYSDATETIMEOFFSET

SYSDATETIMEOFFSET()の取得結果画面

SYSDATETIMEOFFSET()の取得結果画面

誤差について

SQL Server は、GetSystemTimeAsFileTime() Windows API を使用して日付と時刻の値を取得しています。
精度は、SQL Server のインスタンスが実行されているコンピューター ハードウェアおよび Windows のバージョンによって異なります。
この API の精度は 100 ナノ秒で固定されます。
精度は、GetSystemTimeAdjustment() Windows API を使用して確認できます。

以上、「SQL Server 現在日時を取得する: GETDATE, SYSDATETIME」の紹介でした。