現在の日時を取得するには、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() |
検証環境
-
Microsoft SQL Server 2019 (RTM-CU10) (KB5001090) - 15.0.4123.1 (X64) Mar 22 2021 18:10:24 Copyright (C) 2019 Microsoft Corporation Express Edition (64-bit) on Linux (Ubuntu 20.04.2 LTS) <X64>
-
Docker image: mcr.microsoft.com/mssql/server:2019-latest
-
Docker Desktop 3.3.1(63152)
-
Docker Engine 20.10.5
-
Microsoft SQL Server Management Studio v18.8(15.0.18369.0)
-
Microsoft Windows 10 Pro Version 20H2 OS Build 19042.928 Experience: Windows Feature Experience Pack 120.2212.551.0
-
Microsoft SQL Server Express (64-bit) プラットフォーム:NT x64 バージョン:13.0.4001.0
-
Microsoft SQL Server Management Studio v17.7(14.0.17254.0)
-
Microsoft Windows 10 Pro Version 1909 OS Build 18363.904