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

CURRENT_TIMESTAMP (SQL)

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

Synopsis

CURRENT_TIMESTAMP
CURRENT_TIMESTAMP(precision)

引数

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

CURRENT_TIMESTAMP は、TIMESTAMP データ型を返します。

概要

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

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

CURRENT_TIMESTAMP は、%TimeStamp データ型形式 (yyyy-mm-dd hh:mm:ss.ffff) または %PosixTime データ型形式 (エンコードされた 64 ビットの符号付き整数) のいずれかでタイムスタンプを返すことができます。返されるタイムスタンプ形式は以下のルールによって決まります。

  1. 現在のタイムスタンプがデータ型 %PosixTime のフィールドに対して指定されている場合、現在のタイムスタンプ値は POSIXTIME データ型形式で返されます。例として、WHERE PosixField=CURRENT_TIMESTAMPINSERT INTO MyTable (PosixField) VALUES (CURRENT_TIMESTAMP) が挙げられます。

  2. 現在のタイムスタンプがデータ型 %TimeStamp のフィールドに対して指定されている場合、現在のタイムスタンプ値は TIMESTAMP データ型形式で返されます。例として、WHERE TSField=CURRENT_TIMESTAMPINSERT INTO MyTable (TSField) VALUES (CURRENT_TIMESTAMP) が挙げられます。

  3. 現在のタイムスタンプがコンテキストなしで指定されている場合、現在のタイムスタンプ値は TIMESTAMP データ型形式で返されます。例として、SELECT CURRENT_TIMESTAMP が挙げられます。

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

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

CURRENT_TIMESTAMP は、CREATE TABLE または ALTER TABLE を使用して日付/時刻フィールドを定義するときに、precision を付けても付けなくてもフィールドの既定値として指定できます。CURRENT_TIMESTAMP は、データ型 %Library.PosixTimeOpens in a new tab または %Library.TimeStampOpens in a new tab のフィールドの既定値として指定できます。現在の日付と時刻は、フィールドのデータ型によって指定された形式で格納されます。

秒の小数部の精度

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

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

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

秒の小数部は常に、丸められずに、指定された精度に切り捨てられます。

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

  • POSIXTIME データ型形式では、精度の最大桁数は 6 桁です。POSIXTIME 値はすべて 6 桁の精度を使用して計算されます。指定されていない場合、これらの小数桁数は既定で 0 桁になります。サポートされる実際の桁数 (0 以外) は、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 の桁はゼロとして返されます。

日付/時刻関数の比較

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

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

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

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

TIMESTAMP データ型の格納形式と表示形式は同じです。POSIXTIME データ型の格納形式は、エンコードされた 64 ビットの符号付き整数です。TIME および DATE データ型は $HOROLOG 形式の整数として値を格納し、SQL で表示されるときは日付または時刻表示形式に変換されます。埋め込み SQL では既定で、論理 (格納) 形式で返されます。埋め込み SQL で返される値の形式は、"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 タイムスタンプとして返します。LastUpdate がデータ型 %PosixTime である場合、CURRENT_TIMESTAMP は現在の日付と時刻をエンコードされた 64 ビットの符号付き整数として返します。

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