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?

TO_TIMESTAMP

フォーマットされた文字列をタイムスタンプに変換する日付関数です。

Synopsis

TO_TIMESTAMP(date_string[,format])

引数

date_string タイムスタンプに変換される文字列式。この式では日付値、時刻値、または日付と時刻値を指定できます。
format オプションdate_string に対応する日付/時刻形式の文字列。省略した場合、既定の DD MON YYYY HH:MI:SS が使用されます。

説明

TO_TIMESTAMP 関数は、さまざまな形式の日付/時刻文字列をデータ型 TIMESTAMP の標準タイムスタンプに変換します。TO_TIMESTAMP はタイムスタンプを以下の形式で返します。

yyyy-mm-dd hh:mm:ss

常に先頭のゼロが含まれます。時刻は 24 時間形式で指定されます。既定では、返り値のタイムスタンプに秒の小数部は含まれません。

date_string でタイムスタンプのコンポーネントを省略している場合、TO_TIMESTAMP が不足するコンポーネントを提供します。date_stringformat の両方で年が省略されている場合、現在の年が yyyy の既定値として使用されます。date_string でのみ年が省略されている場合、00 が既定値として使用されますが、年の format 要素に従って 4 桁の年に拡張されます。日または月の値が省略されている場合、dd の既定値には 01 が、mm-dd の既定値には 01-01 が使用されます。時刻コンポーネントが不足している場合の既定値は 00 です。秒の小数部はサポートされていますが、既定値では秒の小数部が指定されないため、明示的に指定する必要があります。

TO_TIMESTAMP は、2 桁の年から 4 桁の年への変換をサポートしています。TO_TIMESTAMP は、12 時間形式の時刻から 24 時間形式の時刻への変換をサポートしています。うるう年の検証も含めて、日付および時刻要素値の範囲の検証機能があります。範囲検証違反がある場合は、SQLCODE -400 エラーが生成されます。

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

$SYSTEM.SQL.TOTIMESTAMP(date_string,format)

TO_TIMESTAMP 関数は、タイムスタンプ・フィールドに既定値を指定するときにデータ定義で使用することができます。以下はその例です。

CREATE TABLE Sample.MyEmpReviews
(EmpNum INTEGER UNIQUE NOT NULL,
 ReviewDate TIMESTAMP DEFAULT TO_TIMESTAMP(365,'DDD'))

この例において、レコードを挿入するユーザは、ReviewDate 値を指定するか、ReviewDate 値を指定せずに既定のタイムスタンプ (現在の年の 365 日目の日付) を取得するか、または NULL の ReviewDate を指定して NULL を取得することができます。

TO_TIMESTAMP は、CREATE TABLE 文や ALTER TABLE ADD COLUMN 文で使用できます。このコンテキストでは、date_string にリテラル値のみを使用できます。詳細は、"CREATE TABLE" コマンドを参照してください。

関連する SQL 関数

  • TO_TIMESTAMP は、フォーマットされた日付/時刻文字列を標準のタイムスタンプに変換します。

  • TO_CHAR は、TO_TIMESTAMP とは逆の操作を実行し、標準タイムスタンプをフォーマットされた日付/時刻文字列に変換します。

  • TO_DATE は、フォーマットされた日付文字列を日付整数に変換します。

  • CAST および CONVERT は、TIMESTAMP データ型の変換を実行します。

日付/時刻文字列

date_string 引数は、リテラルで日付と時刻の文字列を指定します。時刻コンポーネントなしで日付文字列を指定すると、TO_TIMESTAMP によって時刻値 00:00:00 が指定されます。日付コンポーネントなしで時刻文字列を指定したときは、TO_TIMESTAMP によって現在の年の日付 01–01 (1 月 1 日) が指定されます。

date_string の入力にはどのような種類の日付/時刻文字列でも指定できます。date_string の各文字は、以下の例外を除いて、format 文字列に対応している必要があります。

  • 区切り文字のない date_string の場合を除き、先頭のゼロは指定しても省略してもかまいません。

  • 年は 2 桁または 4 桁で指定できます。

  • 月の省略形 (format MON) は、そのロケールでの月の省略形と一致している必要があります。ロケールによっては、月の省略形は、月の名前の先頭の連続文字でない場合があります。月の省略形では、大文字と小文字は区別されません。

  • 月の名前 (format MONTH) は、完全な月名として指定する必要があります。ただし、TO_TIMESTAMP では、format MONTH で完全な月名を必要としません。これは完全な月名の最初の文字 (複数可) を受け取り、月のリストからその先頭の文字シーケンスに対応する最初の月を選択します。そのため、英語では、“J” = “January”、“Ju” = “June”、“Jul” = “July” となります。指定されるすべての文字は、完全な月名の連続文字と一致する必要があります。完全な月名を逸脱した文字はチェックされません。例えば、“Fe”、“Febru”、および “FebruaryLeap” はすべて有効な値です。“Febs” は無効な値です。月の名前では、大文字と小文字は区別されません。

  • 時刻値は、該当するロケール用に定義されている時刻区切り文字を使用して入力できます。出力タイムスタンプは必ず、ODBC 標準時刻区切り文字のコロン (:) とピリオド (.) で時刻値を表します。時、分、秒にはコロン (:)、秒の小数部にはピリオド (.) が使用されます。時刻要素を省略すると、既定で 00:00:00 が使用されます。既定では、秒の小数部のないタイムスタンプが返されます。

形式

format は、以下の規則に従って指定された 1 つまたは複数の形式要素の文字列です。

  • 形式要素では、大文字と小文字は区別されません。

  • 形式要素をどのような順序で、またはいくつ使うかについては、たいていの場合制限はありません。

  • 形式文字列は、date_string の区切り文字に一致する、英数字でない区切り文字 (スペース、スラッシュ、ハイフンなど) で要素を区切ります。これらの区切り文字は出力文字列には表示されません。出力文字列では標準のタイムスタンプ区切り文字であるハイフン (日付値)、コロン (時刻値)、および秒の小数部がある場合は必要に応じてピリオドが使用されます。この区切り文字の使用は、NLS ロケールに対して定義されている DateSeparator に依存しません。

  • 日付形式文字列 MMDDYYYYDDMMYYYYYYYYMMDDHHMISSYYYYMMDDHHMIYYYYMMDDHHYYYYMMDDYYYYDDMMHHMISS、および HHMI には、区切り文字は必要ありません。不完全な日付形式 YYYYMM も使用でき、DD 値は 01 と見なされます。ただし、このような場合、最後の要素を除くすべての要素 (MM 値と DD 値など) の先頭にゼロを記述する必要があります。

  • 有効な形式要素がない format の文字は無視されます。

形式の要素

以下のテーブルは、format 引数に対する有効な日付形式要素を示しています。

要素 意味
DD 2 桁の日付 (01 ~ 31)。format に日付の区切り文字を記述している場合、各要素の先頭にゼロは不要です。
MM

2 桁の月数 (01 ~ 12、01 = 1 月)。format に日付の区切り文字を記述している場合、各要素の先頭にゼロは不要です。

日本語と中国語では、月数は数値とそれに続く表意文字 “月” で構成されます。

MON 現在のロケールの MonthAbbr プロパティによって指定される月の略名。既定で、これは英語による月名の最初の 3 文字です。その他のロケールでは、月名の略名が 4 文字以上になる場合や、月名の最初の数文字で構成されない場合があります。ピリオド文字の使用は認められていません。大文字と小文字は区別されません。
MONTH 現在のロケールの MonthName プロパティによって指定される正式な月名。大文字と小文字は区別されません。
YYYY 4 桁の年数。
YY 下 2 桁の年数。2 桁の YY の年数の最初の 2 桁は既定で 19 になります。
RR / RRRR 2 桁の年数から 4 桁の年数への変換 (以下を参照)。
DDD 年間通算日。1 月 1 日からの日数 (以下を参照)。
HH 時間。午前/午後のインジケータ(AM または PM) が指定されているかどうかに応じて、01 ~12、または 00 ~ 23 によって指定されます。HH12 または HH24 と指定できます。
MI 分。00 ~ 59 によって指定されます。
SS 秒。00 ~ 59 によって指定されます。
FF 秒の小数部。2 文字の要素 FF は、1 桁以上の小数桁数が返されることを示します。実際に返される小数桁数は date_string で指定し、任意の小数桁数を指定できます。TO_TIMESTAMP は、date_string で明示的に指定された小数値をそのとおりに返します。末尾のゼロの埋め込みや切り捨ては行われません。小数点記号の文字を指定する必要があります。この形式要素が 2 文字の要素 FF でない場合、秒の小数部は無視されます。既定では、Caché タイムスタンプに秒の小数部は含まれません。
AM と PM 午前/午後のインジケータ。12 時間形式を指定します (以下を参照)。
A.M. と P.M. 午前/午後のインジケータ (ピリオド付き)。12 時間形式を指定します (以下を参照)。

TO_TIMESTAMP format には、入力値 date_string と一致する D (曜日番号)、DY (曜日の省略形)、または DAY (曜日名) 要素を含めることもできます。ただし、これらの形式要素は、検証されることや戻り値の決定に使用されることはありません。これらの format 要素の詳細は、"TO_CHAR" を参照してください。

2 桁の年の変換 (RR および RRRR 形式)

RR 形式では、2 桁の年から 4 桁の年への変換を行います。この変換は現在の年に基づきます。現在の年が、ある世紀の前半 (例えば 2000 ~ 2050 年) にある場合、00 ~ 49 までの 2 桁の年は現在の世紀の 4 桁の年に拡張され、50 ~ 99 までの 2 桁の年は前の世紀の 4 桁の年に拡張されます。現在の年が、ある世紀の後半 (例えば、2050 ~ 2099 年) にある場合、すべての 2 桁の年が現在の世紀の 4 桁の年に拡張されます。2 桁の年から 4 桁の年へのこの拡張について、以下の例に示します。

SELECT TO_TIMESTAMP('29 September 00','DD MONTH RR'),
       TO_TIMESTAMP('29 September 08','DD MONTH RR'),
       TO_TIMESTAMP('29 September 49','DD MONTH RR'),
       TO_TIMESTAMP('29 September 50','DD MONTH RR'),
       TO_TIMESTAMP('29 September 77','DD MONTH RR')

RRRR 形式により、2 桁と 4 桁の年を混合して入力することができます。4 桁の年は変更されずに渡されます (YYYY と同じ)。2 桁の年は RR 形式アルゴリズムを使用して 4 桁の年に変換されます。詳細は、以下の例を参照してください。

SELECT TO_TIMESTAMP('29 September 2008','DD MONTH RRRR')AS FourDigit,
       TO_TIMESTAMP('29 September 08','DD MONTH RRRR') AS TwoDigit,
       TO_TIMESTAMP('29 September 1949','DD MONTH RRRR') AS FourDigit,
       TO_TIMESTAMP('29 September 49','DD MONTH RRRR') AS TwoDigit,
       TO_TIMESTAMP('29 September 1950','DD MONTH RRRR') AS FourDigit,
       TO_TIMESTAMP('29 September 50','DD MONTH RRRR') AS TwoDigit

年間通算日 (DDD 形式)

DDD を使用して、年間通算日 (1 月 1 日から経過した日数) を実際の日付に変換します。形式文字列 DDD YYYY は、整数の日数と 4 桁の年で構成される、対応する date_string と組み合わせる必要があります。(2 桁の年は、DDD と共に使用する場合は RR (YY ではない) として指定する必要があります)。 形式文字列 DDD の既定は、現在の年となります。経過した日数は、1 ~ 365 の範囲の正の整数である必要があります (YYYY がうるう年の場合は 366)。4 桁の年は、標準の Caché の日付範囲 (1841 ~ 9999) である必要があります (年を省略した場合、既定として現在の年が使用されます)。DDD および年 (YYYY、RRRR、または RR) 形式要素は、任意の順序で指定できます。これらの間の区切り文字は必須です。この区切り文字として空白を使用することができます。以下の例は、この年間通算日の使用法を示しています。

SELECT TO_TIMESTAMP('2008:160','YYYY:DDD')

形式文字列に DD と DDD 要素の両方が含まれる場合、DDD 要素が優勢です。以下の例に示すとおり、2008-12-31 00:00:00 ではなく 2008-02-29 00:00:00 が返されます。

SELECT TO_TIMESTAMP('2008-12-31-60','YYYY-MM-DD-DDD')

TO_TIMESTAMP では、年間通算日に対応する日付式を返すことができます。TO_CHAR では、日付表現に対応する年間通算日を返すことができます。

1841 年より前の日付

TO_TIMESTAMP では、1840 年 12 月 31 日より前の日付を表記できません。このような日付を入力しようとすると、SQLCODE -400 エラーが生成されます。

TO_DATE は、ユリウス日の日付形式で紀元前 (BCE) 4712 年 1 月 1 日まで遡って日付を示すことができます。ユリウス日の変換は、7 桁の正の内部整数値 (ユリウス日のカウント) を表示形式または ODBC 形式の日付に変換します。ユリウス日では時刻値がサポートされません。

12 時間形式の時刻

TIMESTAMP では、時刻が常に 24 時間形式で示されます。date_string は、12 時間形式でも 24 時間形式でも時刻を示すことができます。TO_TIMESTAMP は、以下のいずれかが適用される場合を除き 24 時間形式を想定しています。

  • date_string 時刻値の後ろに 'am' か 'pm' (ピリオドなし) が続く場合。これらの午前/午後のインジケータでは、大文字と小文字が区別されません。また、時刻値に付加することも、1 つ以上のスペースで区切ることもできます。

  • format が、1 つまたは複数のスペースによって時刻形式から分離されており、'a.m.' または 'p.m.' 要素 (どちらか 1 つ) を含む時刻形式の後に続く場合。例えば、DD MON YYYY HH:MI:SS.FF P.M. のようになります。この format2:23pm2:23:54.6pm2:23:54 pm2:23:54 p.m.、および 2:23:54 (AM と想定) のような 12 時間形式 date_string 値をサポートします。午前/午後のインジケータでは、大文字と小文字が区別されません。ピリオド付きの午前/午後のインジケータを使用する場合、1 つ以上のスペースで区切る必要があります。

以下の埋め込み SQL の例は、さまざまな形式で日付文字列を指定します。最初の例は既定の形式を使用し、それ以外は format を指定します。これらはすべて、date_string をタイムスタンプ値 2007–06–29 00:00:00 に変換します。

  &sql(SELECT
       TO_TIMESTAMP('29 JUN 2007'),
       TO_TIMESTAMP('2007 Jun 29','YYYY MON DD'),
       TO_TIMESTAMP('JUNE 29, 2007','month dd, YYYY'),
       TO_TIMESTAMP('2007***06***29','YYYY***MM***DD'),
       TO_TIMESTAMP('06/29/2007','MM/DD/YYYY'),
       TO_TIMESTAMP('29/6/2007','DD/MM/YYYY')
    INTO :a,:b,:c,:d,:e,:f)
  IF SQLCODE=0 { WRITE !,a,!,b,!,c,!,d,!,e,!,f }
  ELSE { WRITE "SQLCODE error:",SQLCODE }

以下の例は、YYYYMM 日付形式を指定します。これは要素セパレータを必要としません。TO_TIMESTAMP によって、不足している日付値と時刻値が補われます。

 SELECT TO_TIMESTAMP('200706','YYYYMM')

この例は、タイムスタンプ 2007–06–01 00:00:00 を返します。

以下の例は、HH:MI:SS.FF 時刻形式のみを指定します。TO_TIMESTAMP によって、不足している日付値が補われます。いずれの場合も、日付 2017–01–01 (2017 が現在の年の場合) が返されます。

SELECT TO_TIMESTAMP('11:34','HH:MI:SS.FF'),
       TO_TIMESTAMP('11:34:22','HH:MI:SS.FF'),
       TO_TIMESTAMP('11:34:22.00','HH:MI:SS.FF'),
       TO_TIMESTAMP('11:34:22.7','HH:MI:SS.FF'),
       TO_TIMESTAMP('11:34:22.7000000','HH:MI:SS.FF')

秒の小数部は指定どおりに渡され、埋め込みや切り捨ては行われません。

以下の例は、秒の小数部が含まれる時刻形式を指定するための別の方法を示しています。

SELECT TO_TIMESTAMP('113422.9678','HHMISS.FF')

関連項目

FeedbackOpens in a new tab