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

日付/時刻文 (SQL)

ODBC の日付、時刻、またはタイムスタンプを検証して変換します。

Synopsis

{d 'yyyy-mm-dd'}
{d nnnnnn}

{t 'hh:mm:ss[.fff]'}
{t nnnnn.nnn}

{ts 'yyyy-mm-dd [hh:mm:ss.fff]'}
{ts 'mm/dd/yyyy [hh:mm:ss.fff]'}
{ts nnnnnn}

概要

これらの文は整数または ODBC の日付形式、時刻形式、またはタイムスタンプ形式の文字列を受け取り、それを対応する InterSystems IRIS の日付形式、時刻形式、またはタイムスタンプ形式に変換します。これらの文は、データ形式の決定と、値および範囲のチェックを行います。

{d 'string'}

{d 'string'} 日付文は、ODBC 形式の日付を検証します。この日付が有効である場合は、1840-12-31 以降の整数カウント値として、(論理モードで) InterSystems IRIS $HOROLOG 日付形式で格納します。InterSystems IRIS によって、既定の時刻値が追加されることはありません。1840-12-31 より前の日付をサポートするには、テーブル内にデータ型 %Library.Date(MINVAL=-nnn) の日付フィールドを定義する必要があります。MINVAL は、1840-12-31 (0 日目) から最大値 -672045 (0001-01-01) まで遡ってカウントする負の日数です。

以下のように指定するとします。

  • -672045 (0001-01-01) 未満または 2980013 (9999-12-31) より大きい整数は、SQLCODE -400 <VALUE OUT OF RANGE> エラーとなります。

  • 無効な日付 (ODBC 形式でない日付やうるう年以外の 02-29 の日付など) : InterSystems IRIS は SQLCODE -146 エラー: “yyyy-mm-dd' は無効な ODBC/JDBC 日付値です” を生成します。

  • ODBC タイムスタンプ値: InterSystems IRIS はタイムスタンプの日付部分と時刻部分の両方を検証します。両方が有効な場合は、日付部分のみが変換されます。日付と時刻のいずれかが無効な場合、システムは SQLCODE -146 エラーを生成します。

{t 'string'}

{t 'string'} 時刻文は、ODBC 形式の時刻を検証します。この時刻が有効である場合は、深夜 0 時以降の秒数の整数カウント値として、(論理モードで) 指定の小数部と共に InterSystems IRIS $HOROLOG 時刻形式で格納します。InterSystems IRIS 表示モードおよび ODBC モードでは、秒の小数部は表示されません。秒の小数部は、これらの表示形式から切り捨てられます。

以下のように指定するとします。

  • 0 (00:00:00) 未満または 86399.99 (23:59:59.99) より大きい整数は、SQLCODE -400 <ILLEGAL VALUE> エラーとなります。

  • 無効な時刻 (ODBC 形式でない時刻や 23 より大きな時間) : InterSystems IRIS は SQLCODE -147 エラー: “hh:mi:ss.fff' は無効な ODBC/JDBC 時刻値です” を生成します。

  • ODBC タイムスタンプ値: InterSystems IRIS は SQLCODE -147 エラーを生成します。

{ts 'string'}

{ts 'string'} タイムスタンプ文は、日付/時刻を検証し、ODBC タイムスタンプ形式で返します。指定された秒の小数部が常に保持され、表示されます。また、{ts 'string'} タイムスタンプ文は、日付も検証し、時刻値 00:00:00 を指定して ODBC タイムスタンプ形式で返します。

以下のように指定するとします。

  • 正または負の整数日付 (-672045 ~ 2980013): InterSystems IRIS は時刻値として 00:00:00 を追加してから、生成されたタイムスタンプを ODBC 形式で格納します。例えば、64701 の場合は 2018/02/22 00:00:00 が返されます。これは有効な $HOROLOG 日付整数です。$HOROLOG 0 は 1840-12-31 です。

  • ODBC 形式の有効なタイムスタンプ: InterSystems IRIS は指定された値を変更せずに格納します。これは InterSystems IRIS のタイムスタンプ形式が ODBC タイムスタンプ形式と同じためです。

  • ロケールの既定の日付形式および時刻形式を使用した有効なタイムスタンプ (例、2/29/2016 12:23:46.77) : InterSystems IRIS は指定された値を ODBC 形式で格納して表示します。

  • 無効なタイムスタンプ (うるう年以外で日付部分に 02-29 を指定したタイムスタンプや、時刻部分で 23 より大きな時間が指定されたタイムスタンプなど) : InterSystems IRIS は値として文字列 “error” を返します。

  • 有効な日付 (ODBC 形式またはロケール形式) で時刻指定なし: InterSystems IRIS は時刻値として 00:00:00 を追加してから、生成されたタイムスタンプを ODBC 形式で格納します。必要に応じて、先行のゼロが指定されます。例えば、2/29/2016 の場合は 2016/02/29 00:00:00 が返されます。

  • 形式は正しいが無効な日付 (ODBC 形式またはロケール形式) で時刻指定なし: InterSystems IRIS は時刻値として 00:00:00 を追加します。その後、指定に従って日付部分を格納します。例えば、02/29/2019 の場合は 02/29/2019 00:00:00 が返されます。

  • 形式が正しくない無効な日付(ODBC 形式、ロケール形式、または $HOROLOG 形式) で時刻指定なし: InterSystems IRIS は文字列 “error” を返します。例えば、2/29/2019 (先行のゼロはなく、日付値は無効) の場合は、“error” が返されます。00234 (先行のゼロがある $HOROLOG) では、“error” が返されます。

詳細は、"ObjectScript リファレンス" の "$HOROLOG" 特殊変数を参照してください。

次のダイナミック SQL の例は、ODBC 形式で指定された日付 (先行にゼロがある場合もない場合も) を検証し、$HOROLOG 相当値 64701 として格納します。この例では、%SelectMode 0 (論理) 値が表示されます。

  SET myquery = 2
  SET myquery(1) = "SELECT {d '2018-02-22'} AS date1,"
  SET myquery(2) = "{d '2018-2-22'} AS date2"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET tStatement.%SelectMode=0
  SET tStatus = tStatement.%Prepare(.myquery)
  SET rset = tStatement.%Execute()
  DO rset.%Display()

次のダイナミック SQL の例は、ODBC 形式で指定された時刻 (先行にゼロがある場合もない場合も) を検証し、$HOROLOG 相当値 43469 として格納します。この例では、%SelectMode 0 (論理) 値が表示されます。

  SET myquery = 3
  SET myquery(1) = "SELECT {t '12:04:29'} AS time1,"
  SET myquery(2) = "{t '12:4:29'} AS time2,"
  SET myquery(3) = "{t '12:04:29.00000'} AS time3"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET tStatement.%SelectMode=0
  SET tStatus = tStatement.%Prepare(.myquery)
  SET rset = tStatement.%Execute()
  DO rset.%Display()

次のダイナミック SQL の例は、ODBC 形式で指定され、秒の小数部のある時刻を検証し、$HOROLOG 相当値 43469 として秒の小数部を追加して格納します。末尾のゼロは切り捨てられます。この例では、%SelectMode 0 (論理) 値が表示されます。

  SET myquery = 3
  SET myquery(1) = "SELECT {t '12:04:29.987'} AS time1,"
  SET myquery(2) = "{t '12:4:29.987'} AS time2,"
  SET myquery(3) = "{t '12:04:29.987000'} AS time3"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET tStatement.%SelectMode=0
  SET tStatus = tStatement.%Prepare(.myquery)
  SET rset = tStatement.%Execute()
  DO rset.%Display()

次のダイナミック SQL の例は、いくつかの形式による時刻および日付の値を検証し、相当する ODBC タイムスタンプとして格納します。必要に応じて時刻値 00:00:00 が指定されます。この例では、%SelectMode 0 (論理) 値が表示されます。

  SET myquery = 6
  SET myquery(1) = "SELECT {ts '2018-02-22 01:43:38'} AS ts1,"
  SET myquery(2) = "{ts '2018-02-22'} AS ts2,"
  SET myquery(3) = "{ts '02/22/2018 01:43:38.999'} AS ts3,"
  SET myquery(4) = "{ts '2/22/2018 01:43:38'} AS ts4,"
  SET myquery(5) = "{ts '02/22/2018'} AS ts5,"
  SET myquery(6) = "{ts '64701'} AS ts6"
  SET tStatement = ##class(%SQL.Statement).%New()
  SET tStatement.%SelectMode=0
  SET tStatus = tStatement.%Prepare(.myquery)
  SET rset = tStatement.%Execute()
  IF rset.%Next() {
  WRITE rset.ts1,!
  WRITE rset.ts2,!
  WRITE rset.ts3,!
  WRITE rset.ts4,!
  WRITE rset.ts5,!
  WRITE rset.ts6
  }
FeedbackOpens in a new tab