UNIX_TIMESTAMP (SQL)
構文
UNIX_TIMESTAMP([date-expression])
説明
UNIX_TIMESTAMP は、UNIX® タイムスタンプ ('1970-01-01 00:00:00' からの秒数 (および秒の小数部)) を返します。
date-expression が指定されていない場合、現在の UTC タイムスタンプが date-expression の既定値として使用されます。したがって、UNIX_TIMESTAMP() は、システム全体の既定の 3 の精度を前提とする UNIX_TIMESTAMP(GETUTCDATE(3)) と同等になります。
date-expression が指定されている場合、UNIX_TIMESTAMP は、UNIX タイムスタンプの秒数を計算して、指定されている date-expression 値を UNIX タイムスタンプに変換します。UNIX_TIMESTAMP は、正または負の秒数を返すことができます。
UNIX_TIMESTAMP は、その値をデータ型 %Library.Numeric として返します。秒の小数部の精度を返すことができます。date-expression が指定されていない場合、現在構成されているシステム全体の精度が使用されます。date-expression が指定されている場合、その date-expression の精度が使用されます。
date-expression 値
オプションの date-expression は、以下の値として指定できます。
-
ODBC タイムスタンプ値 (データ型 %Library.TimeStampOpens in a new tab) : YYYY-MM-DD HH:MI:SS.FFF。
-
PosixTime タイムスタンプ値 (データ値 %Library.PosixTimeOpens in a new tab) : エンコードされた 64 ビットの符号付き整数。
-
$HOROLOG データ値 (データ型 %Library.DateOpens in a new tab) : 1840 年 12 月 31 日からの日数 (1 は 1841 年 1 月 1 日を示します)。
-
秒の小数部を含む/含まない $HOROLOG タイムスタンプ : 64412,54736。
UNIX_TIMESTAMP ではタイムゾーンの変換は行われません。date-expression が UTC 時刻である場合、UTC UnixTime が返されます。date-expression がローカル時刻である場合、ローカル UnixTime 値が返されます。
秒の小数部の精度
秒の小数部は、丸められずに、常に指定された精度に切り捨てられます。
-
%Library.TimeStampOpens in a new tab データ型形式の date-expression の最大精度は 9 にできます。サポートされる実際の桁数は、date-expression precision 引数、構成されている既定の時刻精度、およびシステム機能によって決まります。構成されている既定の時刻制度よりも大きい precision が指定されている場合、追加の精度桁数は末尾の 0 として返されます。
-
%Library.PosixTimeOpens in a new tab データ型形式の date-expression の最大精度は 6 です。POSIXTIME 値はすべて 6 桁の精度を使用して計算されます。指定されていない場合、これらの小数桁数は既定で 0 桁になります。
精度の構成
既定の精度は、以下の方法で構成できます。
-
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 の桁はゼロとして返されます。
日付/時刻関数の比較
UNIX_TIMESTAMP は、任意の日付からの経過秒数として表される日付と時刻を返します。
TO_POSIXTIME は、UNIX タイムスタンプから計算される、エンコードされた 64 ビットの符号付きの値 (%PosixTime タイムスタンプ) を返します。
GETUTCDATE は、%TimeStamp (ODBC タイムスタンプ) データ型または %PosixTime (エンコードされた 64 ビットの符号付き整数) データ型の値として、ユニバーサルな (タイム・ゾーンに依存しない) 日付と時刻を返します。%PosixTime 値は、対応する UNIX タイムスタンプ値から計算されます。%PosixTime のエンコードにより、迅速にタイムスタンプの比較や計算を行うことが容易になります。%Library.PosixTimeOpens in a new tab クラスには、UNIX タイムスタンプを PosixTime タイムスタンプに変換する UnixTimeToLogical()Opens in a new tab メソッド、および PosixTime タイムスタンプを UNIX タイムスタンプに変換する LogicalToUnixTime()Opens in a new tab メソッドがあります。これらのメソッドは、どちらもタイムゾーンの変換を行いません。
ObjectScript $ZTIMESTAMP 特殊変数を使用して、ユニバーサルな (タイムゾーンに依存しない) タイムスタンプを返すこともできます。
ObjectScript $ZDATETIME 関数の dformat -2 は、InterSystems IRIS $HOROLOG 日付を取り、UNIX タイムスタンプを返します。$ZDATETIMEH dformat -2 は、UNIX タイムスタンプを取り、InterSystems IRIS %HOROLOG 日付を返します。これらの ObjectScript 関数は、ローカル時刻を UTC 時刻に変換します。UNIX_TIMESTAMP は、ローカル時刻を UTC 時刻に変換しません。
引数
date-expression
列の名前や、他のスカラ関数の結果、または日付やタイムスタンプ・リテラルである式 (オプション)。UNIX_TIMESTAMP は、タイムゾーン間の変換は行いません。date-expression が省略されている場合、現在の UTC タイムスタンプが既定値として使用されます。
例
以下の例では、UTC UNIX タイムスタンプを返しています。最初の select-item では date-expression の既定値が使用されており、2 番目の select-item では明示的な UTC タイムスタンプが指定されています。
SELECT
UNIX_TIMESTAMP() AS DefaultUTC,
UNIX_TIMESTAMP(GETUTCDATE(3)) AS ExplicitUTC
以下の例では、現在のローカル日付とローカル時刻のローカル UNIX タイムスタンプ、および UTC 日付値と UTC 時刻値の UTC UNIX タイムスタンプを返しています。最初の select-item ではローカル CURRENT_TIMESTAMP、2 番目の select-item では $HOROLOG (ローカル日付とローカル時刻)、3 番目の select-item では現在の UTC 日付と UTC 時刻が指定されています。
SELECT
UNIX_TIMESTAMP(CURRENT_TIMESTAMP(2)) AS CurrTSLocal,
UNIX_TIMESTAMP($HOROLOG) AS HorologLocal,
UNIX_TIMESTAMP(GETUTCDATE(3)) AS ExplicitUTC
以下の例では、UNIX_TIMESTAMP (ローカル時刻を変換しません) と $ZDATETIME (ローカル時刻を変換します) を比較しています。
SET unixutc=$ZDATETIME($HOROLOG,-2)
SET myquery = "SELECT UNIX_TIMESTAMP($HOROLOG) AS UnixLocal,? AS UnixUTC"
SET tStatement = ##class(%SQL.Statement).%New()
SET qStatus = tStatement.%Prepare(myquery)
IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
SET rset = tStatement.%Execute(unixutc)
DO rset.%Display()
関連項目
-
SQL タイムスタンプ関数 : CAST、CONVERT、GETDATE、GETUTCDATE、NOW、SYSDATE、TIMESTAMPADD、TIMESTAMPDIFF、TO_POSIXTIME、TO_TIMESTAMP
-
ObjectScript : $ZDATETIME 関数と $ZDATETIMEH 関数、$HOROLOG 特殊変数、$ZTIMESTAMP 特殊変数