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()
関連項目
-
CAST 関数
-
CURDATE および CURRENT_DATE 関数
-
GETUTCDATE 関数
-
NOW 関数
-
TO_TIMESTAMP 関数
-
$HOROLOG 特殊変数
-
$ZTIMESTAMP 特殊変数