前回は、SQL ServerのTransact-SQL(T-SQL)で、文字列を操作する関数について紹介しました。本編では、日付と数値を操作する関数について紹介していきます。

日付時刻に関する関数

それでは、日付時刻の妥当性をチェックしたり、現在時刻を取得する関数からみていきましょう。

日付の妥当性チェックと現在時刻を取得する関数の一覧

関数名 戻り値 説明
ISDATE int 日付または時刻として有効であるかを返します。1:有効、0:無効
GETDATE datetime 現在時刻を返します
CURRENT_TIMESTAMP datetime 現在時刻を返します(ANSI SQL)
GETUTCDATE datetime 現在時刻を返します(UTC時刻:協定世界時)
SYSDATETIME datetime2(7) 現在時刻を返します。SQL Server 2008以降
SYSDATETIMEOFFSET datetimeoffset(7) 現在時刻を返します(タイムゾーンオフセット含む)。SQL Server 2008以降
SYSUTCDATETIME datetime2 現在時刻を返します(UTC時刻:協定世界時)。SQL Server 2008以降

日付の妥当性チェック(ISDATE)

日付時刻として妥当かどうかをチェックするには、ISDATE関数を利用します。日付時刻として妥当な場合は1、妥当でない場合は0が返ります。

ISDATE関数の実行例


SELECT ISDATE('2008-12-31')
/* → 1 (有効) */

SELECT ISDATE('2008-12-32')
/* → 0 (無効) */

現在時刻(GETDATE、CURRENT_TIMESTAMP、GETUTCDATE等)

現在の日時を取得するには、GETDATE関数、CURRENT_TIMESTAMP関数を使用します。これらの関数はタイムゾーンに設定された時刻(日本時刻)を返します。これに対し、GETUTCDATE関数は協定世界時を返します。 SQL Server 2008からは、SYSDATETIME()、SYSDATETIMEOFFSET()、SYSUTCDATETIME()といった関数を使用して、より精度の高い現在日時を取得することができます。

GETDATE関数、CURRENT_TIMESTAMP関数、GETUTCDATE関数等の実行例


SELECT GETDATE()
/* → 2008-09-21 12:02:25.687 (現在時刻) */

SELECT CURRENT_TIMESTAMP
/* → 2008-09-21 12:02:25.687 (現在時刻) */

SELECT GETUTCDATE()
/* → 2008-09-21 03:02:25.687 (協定世界時)*/


--以下、SQL Server 2008以降
SELECT SYSDATETIME()
/* → 2008-09-21 12:02:25.6870000 (高精度の現在時刻) */

SELECT SYSDATETIMEOFFSET()
/* → 2008-09-21 12:02:25.6870000 +09:00(高精度でオフセット付の現在時刻) */

SELECT SYSUTCDATETIME()
/* → 2008-09-21 03:02:25.6870000 (高精度の協定世界時)*/

これらの6つの関数は、SQL Serverが実行されているコンピュータの日時を返します。そのため、時刻の精度はハードウェアとOSのバージョンに依存します。