現在の日時を取得するには、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 |
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


