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?

DATE

タイムスタンプを取得して、日付を返す関数です。

Synopsis

DATE(timestamp)

引数

timestamp タイムスタンプ、またはその他の日付あるいは日付と時刻の表現を指定する式。

説明

DATE はタイムスタンプ式を取得して、日付を返します。戻り値は DATE データ型です。この機能は CAST(timestamp AS DATE) と同じです。これは、%Library.TimeStamp、%Library.Date、および %Library.Integer または %Library.Numeric (+$HOROLOG のような暗黙の論理日付の場合) のデータ型を持つ timestamp 値を受け入れます。また、%Library.TimeStamp と互換性のある形式の %Library.String 値 (有効な ODBC 日付) も受け入れます。

無効な ODBC 日付文字列は、1840 年 12 月 31 日に相当するゼロと評価されます。timestamp には、ODBC 形式の日付のみ、または ODBC 形式の日付と時刻を含むことができます。変換されるのは ODBC timestamp の日付部分のみですが、文字列全体が検証されます。日付部分が不完全な場合、日付または時刻部分に範囲外の値が含まれている場合 (うるう年の計算を含む)、または timestamp に無効な形式の文字や末尾の文字が含まれている場合は、ODBC timestamp は検証に失敗します。

空の文字列 ('') 引数を指定すると、0 (1840 年 12 月 31 日) が返されます。NULL 引数は NULL を返します。

この関数は、ObjectScript から DATE()Opens in a new tab メソッド呼び出しを使用して呼び出すこともできます。

  WRITE $SYSTEM.SQL.DATE("2016-02-23 12:37:45")

$HOROLOG と $ZTIMESTAMP

$HOROLOG$ZTIMESTAMP は、文字列値を返します。文字列を数値型にキャストすると、常に数値のゼロ (0) が返されます。0 の Caché DATE データ型の値は、1840 年 12 月 31 日です。

したがって、$HOROLOG または $ZTIMESTAMP を現在の日付として解釈するには、接頭語としてプラス記号 (+) を付ける必要があります。これにより、数値解釈が適用されます。詳細は、以下の例を参照してください。

SELECT DATE($HOROLOG),DATE($ZTIMESTAMP)  // both return 12/31/1840
SELECT DATE(+$HOROLOG),DATE(+$ZTIMESTAMP)  // both return the current date

ODBC 日付文字列

DATE 関数と $SYSTEM.SQL.DATE() メソッドのどちらにも、ODBC 日付形式の文字列を使用できます。これらは入力文字列を検証します。検証に合格すると、対応する日付を返します。検証に合格しない場合は、0 を返します。検証は以下のように実行されます。

  • 文字列は ODBC 形式 yyyy-mm-dd hh:mm:ss.xx に対応していることが必要です。文字列の日付部分だけでなく、文字列全体の形式について正しいかどうかが解析されます。

  • 文字列には (少なくとも) 完全な日付 yyyy-mm-dd が含まれていることが必要です。先頭のゼロは含めることも、省略することもできます。時刻部分は省略可能で、任意の時刻部分を yyyy-mm-dd hh: の形式で含めることができます。

  • 文字列のそれぞれの数値要素 (日付部分と時刻部分の両方) には、有効な値が含まれていることが必要です。例えば、月の値には 1 ~ 12 を指定する必要があります。日付の値には、指定された月の日数を超える数は指定できません。うるう年の日数は計算されます。

  • 日付は Caché の日付範囲内であることが必要です。最小の日付は 1840-12-31、最大の日付は 9999-12-31 になります。

以下の例では、データ型 %Library.TimeStamp の値を取得します。

  SET myquery = "SELECT {fn NOW} AS NowCol,DATE({fn NOW}) AS DateCol"
  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()
  DO rset.%Display()
  SET myquery = "SELECT CURRENT_TIMESTAMP AS TSCol,DATE(CURRENT_TIMESTAMP) AS DateCol"
  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()
  DO rset.%Display()
  SET myquery = "SELECT GETDATE() AS GetDateCol,DATE(GETDATE()) AS DateCol"
  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()
  DO rset.%Display()

以下の例では、%Library.TimeStamp 形式の文字列値を取得します。

  SET myquery = "SELECT '1995-09-10 13:14:23' AS DateStrCol,DATE('1995-09-10 13:14:23') AS DateCol"
  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()
  DO rset.%Display()

以下の例では、Caché 論理形式で日付を表す文字列値を取得します。これらの値を %Library.Date データ型に正しく変換するために、値には接頭語としてプラス記号 (+) を付けて数値評価を適用する必要があります。

  SET myquery = "SELECT $H AS HoroCol,DATE(+$H) AS DateCol"
  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()
  DO rset.%Display()
  SET myquery = "SELECT $ZTIMESTAMP AS TSCol,DATE(+$ZTIMESTAMP) AS DateCol"
  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()
  DO rset.%Display()

関連項目

FeedbackOpens in a new tab