Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

UNIX_TIMESTAMP (SQL)

日付式を UNIX タイムスタンプに変換する日付/時刻関数です。

Synopsis

UNIX_TIMESTAMP([date-expression])

引数

引数 説明
date-expression オプション — 列の名前や、他のスカラ関数の結果、または日付やタイムスタンプ・リテラルである式。UNIX_TIMESTAMP は、タイムゾーン間の変換は行いません。date-expression が省略されている場合、現在の UTC タイムスタンプが既定値として使用されます。

説明

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 は、以下の値として指定できます。

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 時刻に変換しません。

以下の例では、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()

関連項目

FeedbackOpens in a new tab