Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

CURRENT_TIMESTAMP

現在のローカルな日付と時刻を返す日付/時刻関数です。

Synopsis

CURRENT_TIMESTAMP
CURRENT_TIMESTAMP(precision)

引数

precision 時刻の精度を秒の小数部の桁数として指定する正の整数。既定値は 0 (秒の小数部なし) です。この既定値は構成可能です。

概要

CURRENT_TIMESTAMP は、引数を取らないか、精度引数を取ります。空引数の括弧は使用しません。

CURRENT_TIMESTAMP は、このタイムゾーンの現在のローカル日付とローカル時刻を返します。これはサマータイムなどのローカル時刻調整に合わせて調整されます。

CURRENT_TIMESTAMP は、%TimeStamp データ型形式 (yyyy-mm-dd hh:mm:ss.ffff) でタイムスタンプを返すことができます。

$HOROLOG を使用すると、内部形式で現在のローカル日付とローカル時刻を保存して返すようにすることができます。

既定の日付/時刻形式を変更するには、各種日付/時刻オプションで SET OPTION コマンドを使用します。

CURRENT_TIMESTAMP は、CREATE TABLE または ALTER TABLE を使用して日付/時刻フィールドを決定するときに、フィールドの既定値として precision を付けても付けなくても指定できます。

秒の小数部の精度

CURRENT_TIMESTAMP には、次の 2 つの構文形式があります。

  • 引数の括弧がない場合、CURRENT_TIMESTAMPNOW と機能的に同じになります。システム全体の既定の時刻精度を使用します。

  • 引数の括弧がある場合、CURRENT_TIMESTAMP(precision) は、CURRENT_TIMESTAMP() precision 引数が必須である点を除いて、GETDATE と機能的に同じになります。CURRENT_TIMESTAMP() は常に、指定された precision を返し、構成されたシステム全体の既定の時刻制度を無視します。

秒の小数部は常に、丸められずに、指定された精度に切り捨てられます。TIMESTAMP データ型形式では、精度の最大桁数は 9 桁です。サポートされる実際の桁数は、precision 引数、構成されている既定の時刻精度、およびシステム機能によって決まります。構成されている既定の時刻制度よりも大きい precision が指定されている場合、追加の精度桁数は末尾の 0 として返されます。

精度の構成

既定の精度は、以下の方法で構成できます。

  • SET OPTION で TIME_PRECISION オプションを使用します。

  • $SYSTEM.SQL.SetDefaultTimePrecision()Opens in a new tab メソッド呼び出し。

  • 管理ポータルに進み、システム, 構成, 一般SQL設定 を選択します。[GETDATE()、CURRENT_TIME、および CURRENT_TIMESTAMP の既定の時間精度] の現在の設定を表示して編集します。

返される精度の小数点以下の桁数の既定値に 0 ~ 9 の整数を指定します。既定値は 0 です。実際に返される精度はプラットフォームに依存し、システムで使用可能な精度を超えた precision の桁はゼロとして返されます。

日付/時刻関数の比較

GETDATE および NOW を使用して、現在のローカル日付とローカル時刻を TIMESTAMP データ型として返すこともできます。GETDATE は精度をサポートし、NOW は精度をサポートしません。

SYSDATE は、SYSDATEprecision をサポートしない点を除いて、CURRENT_TIMESTAMP と同じになります。CURRENT_TIMESTAMP が優先される Caché SQL 関数で、SYSDATE は他のベンダとの互換性を保つために提供されます。

GETUTCDATE を使用することで、ユニバーサルな (タイム・ゾーンに依存しない) 日付と時刻を TIMESTAMP データ型の値として返すことができます。Caché SQL の時刻関数および日付関数は、GETUTCDATE を除いてすべて、それぞれのローカル・タイム・ゾーン設定に固有です。ユニバーサルな (タイム・ゾーンに依存しない) タイムスタンプを取得するには、GETUTCDATE または ObjectScript の $ZTIMESTAMP 特殊変数を使用します。

現在のローカル日付のみを返すには、CURDATE または CURRENT_DATE を使用します。現在のローカル時刻のみを返すには、CURRENT_TIME または CURTIME を使用します。これらの関数は、その値を DATE または TIME データ型で返します。これらの関数は、いずれも精度をサポートしません。

TIMESTAMP データ型の格納形式と表示形式は同じです。TIME および DATE データ型は $HOROLOG 形式の整数として値を格納し、SQL で表示されるときは日付または時刻表示形式に変換されます。埋め込み SQL では既定で、論理 (格納) 形式で返されます。埋め込み SQL で返される値の形式は、"Caché ObjectScript の使用法" の “ObjectScript マクロとマクロ・プリプロセッサ” の章の説明に従って、#SQLCompile Select マクロ・プリプロセッサ指示文を使用して変更できます。

日付および時刻のデータ型は、CAST または CONVERT 関数を使用して変更できます。

以下の例では、現在のローカル日付とローカル時刻が、システムの既定の時刻精度を使用する TIMESTAMP データ型形式、秒の小数部が 2 桁の precision を使用する TIMESTAMP データ型形式、および整数の秒数を使用する $HOROLOG 内部ストレージ形式という 3 つの異なる方法で返されます。

SELECT 
   CURRENT_TIMESTAMP AS FullSecStamp,
   CURRENT_TIMESTAMP(2) AS FracSecStamp,
   $HOROLOG AS InternalFullSec

以下の埋め込み SQL の例では、ロケールの既定の時刻精度が設定されています。最初の CURRENT_TIMESTAMP では precision が指定されておらず、既定の時刻精度で現在の時刻が返されます。2 番目の CURRENT_TIMESTAMP では precision が指定されており、構成されている既定の時刻精度がオーバーライドされます。precision 引数は、既定の時刻精度の設定よりも大きい値や小さい値にすることができます。

InitialVal
  SET pre=##class(%SYS.NLS.Format).GetFormatItem("TimePrecision")
ChangeVal
  SET x=##class(%SYS.NLS.Format).SetFormatItem("TimePrecision",4)
  &sql(SELECT CURRENT_TIMESTAMP,CURRENT_TIMESTAMP(2) INTO :a,:b)
  IF SQLCODE'=0 {
    WRITE !,"Error code ",SQLCODE }
  ELSE {
    WRITE !,"Timestamp is:  ",a
    WRITE !,"Timestamp is:  ",b }
RestoreVal
  SET x=##class(%SYS.NLS.Format).SetFormatItem("$TimePrecision",pre)

以下の埋め込み SQL の例は、ローカル・タイムスタンプ (タイム・ゾーン依存) とユニバーサル・タイムスタンプ (タイム・ゾーン非依存) を比較します。

  &sql(SELECT CURRENT_TIMESTAMP,GETUTCDATE() INTO :a,:b)
  IF SQLCODE'=0 {
    WRITE !,"Error code ",SQLCODE }
  ELSE {
    WRITE !,"Local timestamp is:  ",a
    WRITE !,"UTC timestamp is:    ",b
    WRITE !,"$ZTIMESTAMP is:      ",$ZDATETIME($ZTIMESTAMP,3,,3)
 }

以下の例は、Orders テーブルの指定された行の LastUpdate フィールドに、現在のシステム日付と時刻を設定します。LastUpdate がデータ型 %TimeStamp である場合、CURRENT_TIMESTAMP は現在の日付と時刻を ODBC タイムスタンプとして返します。

UPDATE Orders SET LastUpdate = CURRENT_TIMESTAMP
  WHERE Orders.OrderNumber=:ord

以下の例は、Orders というテーブルを作成し、このテーブルには、受信した商品注文が記録されます。

CREATE TABLE Orders (
     OrderId     INT NOT NULL,
     ClientId    INT,
     ItemName    CHAR(40) NOT NULL,
     OrderDate   TIMESTAMP DEFAULT CURRENT_TIMESTAMP(3),
     PRIMARY KEY (OrderId))

OrderDate 列には、注文を受信した日付と時刻が含まれます。TIMESTAMP データ型を使用し、有効桁数を 3 とする CURRENT_TIMESTAMP 関数を使用して、現在のシステム日付と時刻を既定値として挿入します。

関連項目

FeedbackOpens in a new tab