GETUTCDATE (SQL)
構文
GETUTCDATE([precision])
説明
GETUTCDATE は、UTC (協定世界時) 日付と UTC 時刻をタイムスタンプとして返します。UTC 時刻は世界共通で、ローカル・タイム・ゾーンに依存しておらず、ローカル時刻調整 (サマータイムなど) の影響は受けないため、異なるタイム・ゾーン間のユーザが同一データベースにアクセスする場合に一貫したタイムスタンプを適用する際にこの関数は便利です。
GETUTCDATE は、%TimeStamp データ型形式 (yyyy-mm-dd hh:mm:ss.ffff) または %PosixTime データ型形式 (エンコードされた 64 ビットの符号付き整数) のいずれかでタイムスタンプを返すことができます。返されるタイムスタンプ形式は以下のルールによって決まります。
-
現在の UTC のタイムスタンプがデータ型 %PosixTime のフィールドに対して指定されている場合、このタイムスタンプ値は POSIXTIME データ型形式で返されます。例として、WHERE PosixField=GETUTCDATE() や INSERT INTO MyTable (PosixField) VALUES (GETUTCDATE()) が挙げられます。
-
現在の UTC のタイムスタンプがデータ型 %TimeStamp のフィールドに対して指定されている場合、このタイムスタンプ値は TIMESTAMP データ型形式で返されます。ODBC タイプは TIMESTAMP で、LENGTH は 16、PRECISION は 19 です。例として、WHERE TSField=GETUTCDATE() や INSERT INTO MyTable (TSField) VALUES (GETUTCDATE()) が挙げられます。
-
現在の UTC のタイムスタンプがコンテキストなしで指定されている場合、このタイムスタンプ値は TIMESTAMP データ型形式で返されます。例として、SELECT GETUTCDATE() が挙げられます。
既定の日付/時刻形式を変更するには、各種日付/時刻オプションで SET OPTION コマンドを使用します。
GETUTCDATE は、主に SELECT 文のセレクト・リストや、クエリの WHERE 節で使用されます。レポートの設計では、GETUTCDATE は、レポートが作成されるたびに、そのときの時刻/日付を印刷するために使用できます。また GETUTCDATE は、トランザクションが発生した時刻のログ記録など、活動を追跡するのに便利です。
GETUTCDATE は、フィールドの既定値を指定するために CREATE TABLE 内で使用できます。
その他の SQL 関数
GETUTCDATE は、現在の UTC 日付と UTC 時刻を TIMESTAMP 形式または POSIXTIME 形式のタイムスタンプとして返します。
その他のタイムスタンプ関数は、ローカル日付とローカル時刻を返します。GETDATE、CURRENT_TIMESTAMP、NOW、および SYSDATE は、現在のローカル日付とローカル時刻を TIMESTAMP 形式または POSIXTIME 形式のタイムスタンプとして返します。
GETDATE と CURRENT_TIMESTAMP では、precision 引数が用意されています。
NOW、引数なしの CURRENT_TIMESTAMP、および SYSDATE では、precision 引数は用意されていません。これらの関数では、システム全体の既定の時刻精度が使用されます。
CURDATE と CURRENT_DATE は、現在のローカル日付を返します。CURTIME と CURRENT_TIME は、現在のローカル時刻を返します。これらの関数では、データ型として DATE または TIME を使用します。これらの関数は、いずれも精度をサポートしません。
TIMESTAMP データ型は、同じ形式で値を格納および表示します。POSIXTIME データ型は、エンコードされた 64 ビットの符号付き整数としてその値を格納します。TIME および DATE の各データ型では $HOROLOG 形式の整数として値が格納されますが、その値はさまざまな形式で表示できます。
InterSystems SQL のタイムスタンプ関数は、GETUTCDATE を除いてすべて、それぞれのローカル・タイム・ゾーン設定に固有です。タイム・ゾーンに依存しない世界時による現在のタイムスタンプの取得には、ObjectScript の $ZTIMESTAMP 特殊変数も使用できます。GETUTCDATE では precision を設定できますが、$ZTIMESTAMP では常に 3 の精度が返されます。
秒の小数部の精度
GETUTCDATE では、小数点以下 9 桁までの精度の値を返すことができます。返される精度の桁数は precision 引数を使用して設定されます。precision 引数の既定値は、以下の方法で構成できます。
-
SET OPTION で TIME_PRECISION オプションを使用します。
-
システム全体の $SYSTEM.SQL.Util.SetOption()Opens in a new tab メソッド構成オプション DefaultTimePrecision。現在の設定を確認するには、$SYSTEM.SQL.CurrentSettings()Opens in a new tab を呼び出します。これにより、[既定の時刻精度] が表示されます。既定値は 0 です。
-
管理ポータルに進み、[システム管理]、[構成]、[SQL およびオブジェクトの設定]、[SQL] の順に選択します。[GETDATE(), CURRENT_TIME, CURRENT_TIMESTAMP のデフォルトの時刻精度] の現在の設定を表示して編集します。
返される精度の小数点以下の桁数の既定値に 0 ~ 9 の整数を指定します。既定値は 0 です。実際に返される精度はプラットフォームに依存し、システムで使用可能な精度を超えた precision の桁はゼロとして返されます。
秒の小数部は、丸められずに、常に指定された精度に切り捨てられます。
引数
precision
時刻の精度を秒の小数部の桁数として指定する正の整数 (オプション)。既定値は 0 (秒の小数部なし) です。この既定値は構成可能です。
例
以下の例は、現在の日付と時刻を TIMESTAMP 形式の UTC タイムスタンプ、およびローカル・タイムスタンプとして返します。
SELECT GETUTCDATE() AS UTCDateTime,
GETDATE() AS LocalDateTime
以下の例は、現在の UTC 日付と時刻で、秒の小数部を 2 桁の精度として返します。
SELECT GETUTCDATE(2) AS DateTime
以下の例は、ローカル・タイムスタンプ (タイム・ゾーン依存) とユニバーサル・タイムスタンプ (タイム・ゾーン非依存) を比較します。
SELECT GETDATE(),GETUTCDATE()
以下の例は、Orders テーブルの指定された行の LastUpdate フィールドに、現在の UTC 日付と UTC 時刻を設定します。LastUpdate がデータ型 %TimeStamp である場合、GETUTCDATE は現在の UTC 日付と UTC 時刻を ODBC タイムスタンプとして返します。LastUpdate がデータ型 %PosixTime である場合、GETUTCDATE は現在の UTC 日付と UTC 時刻をエンコードされた 64 ビットの符号付き整数として返します。
UPDATE Orders SET LastUpdate = GETUTCDATE()
WHERE Orders.OrderNumber=:ord
以下の例では、CREATE TABLE 文は GETUTCDATE を使用して、OrderRcvd フィールドに対して既定値を設定します。
CREATE TABLE Orders(
OrderId INT NOT NULL,
ItemName CHAR(40) NOT NULL,
Quantity INT NOT NULL,
OrderRcvd TIMESTAMP DEFAULT GETUTCDATE())
関連項目
-
SQL タイムスタンプ関数 : CAST、CONVERT、CURRENT_TIMESTAMP、GETDATE、NOW、SYSDATE、TIMESTAMPADD、TIMESTAMPDIFF、TO_POSIXTIME、TO_TIMESTAMP
-
SQL 現在日時関数:CURDATE、CURRENT_DATE、CURRENT_TIME、CURTIME
-
ObjectScript : $ZDATETIME 関数、$HOROLOG 特殊変数、$ZTIMESTAMP 特殊変数