TIMESTAMP_FORMATまたはTO_TIMESTAMPスカラ関数
TIMESTAMP_FORMAT 関数は、指定されたフォーマットを使用して入力ストリングの解釈に基づいて TIMESTAMP WITHOUT TIME ZONE 値を戻します。
スキーマは SYSIBM です。
- 文字列式
- 実際の長さが 255 バイト以下で CLOB と DBCLOB 以外の、組み込みの文字ストリング・データ・タイプまたはグラフィック・ストリング・データ・タイプの値を返す式。 string-expression には、format-string に指定された形式 (ただし、時、分、秒、または端数秒を除く) に対応するタイム・スタンプの構成要素が含まれている必要があります。
- 書式指定文字列
- CLOBまたはDBCLOB以外の、組み込みの文字列またはグラフィック文字列データ型である値を返す式。 実際の長さは、255 バイト以下でなければなりません。 この値は、string-expression を解釈してからタイム・スタンプ値に変換する方法を指定したテンプレートです。
有効な format-string には、少なくとも 1 つのフォーマット・エレメントが含まれていること、およびタイム・スタンプのいずれの構成要素にも複数の指定が含まれていないことが必要です。また、以下の表に特に注記のない限り、フォーマット・エレメントの任意の組み合わせを含めることができます。 例えば、format-string には YY と YYYY の両方を含めることはできません。これは、この両方が string-expression の年の構成要素を解釈するために使用されるためです。 2 つのフォーマット・エレメントは、次の 1 つ以上の区切り文字を使用して区切ることができます。
- 負符号 (-)
- ピリオド (.)
- スラッシュ (/)
- コンマ (,)
- アポストロフィ (')
- セミコロン (;)
- コロン (:)
- ブランク ( )
区切り文字は format-sting の先頭または末尾に指定することもできます。 これらの区切り文字は、フォーマット・ストリングで任意に組み合わせて使用できます (例えば、「YYYY/MM-DD HH:MM.SS」)。 string-expression で指定する区切り文字は構成要素を区切るために使用するものであり、format-string で指定されている区切り文字と一致する必要はありません。
表 1. TIMESTAMP_FORMAT 関数のフォーマット・エレメント フォーマット・エレメント 関連タイム・スタンプ・コンポーネント 説明 AM または PM 1 時 ピリオドが付かない午前/午後の指定子。 このフォーマット・エレメントは、「AM」または「PM」と厳密に一致するストリングを使用します。 A.M. または P.M. 1 時 ピリオドが付いた午前/午後の指定子。 このフォーマット・エレメントは、正確なストリング「A.M.」を使用します。 または「P.M.」 D 1 none 曜日 (1-7)。 DD 日 月の日 (0 から 31)。 DDD 月、日 年の日 (001 から 366)。 FF または FFn 端数秒 小数秒 (0-999999999999)。 数字 n は、string-expression 内に予想される桁数の指定に使用します。 n の有効値は、先行ゼロの付かない 1 から 12 です。 FF を指定することは、FF6 を指定することと同等です。 FF フォーマット・エレメントに対応する string-expression 内の構成要素の後に区切り文字が続いている場合、またはそれが最後の構成要素である場合、小数秒の桁数はフォーマット・エレメントで指定した桁数よりも少ないことがあります。 この場合は、指定した桁数の右側に数字のゼロが埋め込まれます。
HH 時 HH の動作は HH12 と同様です。 HH12 時 12 時間形式の時 (01-12)。 AM がデフォルトの午前/午後の指定子です。 HH24 時 24 時間形式の時 (00-24)。 J 年、月、および日 ユリウス日。紀元前 4713 年 1 月 1 日からの日数。 (0000000-9999999) MI minute 分 (00-59)。 MM 月 月 (01-12)。 MONTH、Month、または month 1、2 月 英語での月の名前。 MON、Mon、または mon 1、2 月 英語での月の省略名。 NNNNNN マイクロ秒 マイクロ秒 ( FF6と同じ形式)。 (000000-999999). RR 年 調整済み年の最後の 2 桁 (00-99)。 RRRR 年 RRRR の動作は YYYY と同様です。 SS 秒 秒 (00-59)。 SSSSS 時、分、および秒 前回の午前0時(00000~86400)からの経過秒数。 Y 年 年の最後の 1 桁 (0-9)。 現在の年の最初の 3 桁が、完全な 4 桁の年の判別に使用されます。 YY 年 年の最後の 2 桁 (00-99)。 現在の年の最初の 2 桁が、完全な 4 桁の年の判別に使用されます。 YYY 年 年の最後の 3 桁 (000-999)。 現在の年の最初の桁が、完全な 4 桁の年の判別に使用されます。 YYYY 年 4 桁の年 (0000-9999)。 注:- このフォーマット・エレメントでは、大文字小文字が区別されます。
- 正確なスペルと大文字小文字の組み合わせだけが使用できます。 このフォーマット・エレメントが無効な大文字小文字の組み合わせで指定された場合、エラーが返されます。
- D フォーマット・エレメントは、結果のタイム・スタンプの構成要素に影響する原因となりません。 ただし、このフォーマット・エレメントに指定する値は、結果のタイム・スタンプの日の構成要素の組み合わせに対して正しくなければなりません。 例えば、string-expression の値「5」は、フォーマット・ストリング値「D」に対して有効です。 一方、string-expression の値「9」は、同じ format-string でもエラーになります。
RR フォーマット・エレメントを使用すると、以下の表に従って現在の年の最後の 2 桁に応じて 4 桁の値を生成するように値を調整することにより、年の指定をどのように解釈するかを変更できます。表 2. 調整済み年の値とタイム・スタンプの構成要素の対応 現在の年の桁数 string-expression 内の 2 桁の年 タイム・スタンプの年の構成要素の最初の 2 桁 00-50 00-49 現在の年の最初の 2 桁 51-99 00-49 現在の年 + 1 の最初の 2 桁 00-50 50-99 現在の年 - 1 の最初の 2 桁 51-99 50-99 現在の年の最初の 2 桁 例えば、現在の年が 2007 の場合、フォーマット 'RR' の '86' は 1986 を意味しますが、現在の年が 2052 の場合は 2086 を意味します。
format-string にタイム・スタンプの以下の構成要素の 1 つに対してフォーマット・エレメントが含まれていない場合は、以下のデフォルトが使用されます。タイム・スタンプの構成要素 デフォルト 年 現在の年、4 桁 月 現在の月。 2 桁 日 01 (現在の月の最初の日) 時 00 minute 00 second 00 端数秒 結果のタイム・スタンプの精度に一致するゼロの数 string-expression に、format-string に指定された時、分、秒、または端数秒のフォーマット・エレメントに対応する値が含まれていない場合は、同じデフォルトが使用されます。
format-string 内の対応するフォーマット・エレメントに有効数字桁数の最大数がないタイム・スタンプ値 (つまり、月、日、時、分、秒) のすべての構成要素に先行ゼロを指定できます。
タイム・スタンプの構成要素 (年、月、日、時、分、秒など) を表す string-expression のサブストリングには、対応するフォーマット・エレメントで指示されたタイム・スタンプのその構成要素の最大桁数より少ない桁数を含めることができます。 入力のない桁はデフォルトのゼロになります。 例えば、フォーマット・ストリング 'YYYY-MM-DD HH24:MI:SS' では、入力した値が '999-3-9 5:7:2' の場合、'0999-03-09 05:07:02' と同じ結果が生成されます。
- 精度一定
- 結果のタイム・スタンプの精度を指定する整数定数。 値の範囲は 0 から 12 です。 precision-constant が指定されていない場合、タイム・スタンプ精度はデフォルトで 6 になります。
この関数の結果は、precision-constant に基づく精度を持つ TIMESTAMP になります。
引数の最初の 2 つのいずれかが NULL 値になる可能性がある場合、結果も NULL 値になる可能性があります。引数の最初の 2 つのいずれかが NULL 値の場合、その結果は NULL 値です。
結果の CCSID は、最初の引数のコード化スキームに適合する CCSID であり、結果のサブタイプは、CCSID に適合するサブタイプです。
注
- ユリウス暦およびグレゴリオ暦:
- この関数では、1582 年 10 月 15 日のユリウス暦からグレゴリオ暦への移行が考慮されます。
- 決定論:
- TIMESTAMP_FORMAT は deterministic 関数です。 ただし、以下の関数の呼び出しは、特殊レジスターの CURRENT TIMESTAMP の値によって決まります。
- format-string が定数でない
- format-string が定数で、ロケールに依存するフォーマット・エレメントが含まれる
- format-string が定数で、年を完全に定義するフォーマット・エレメント (つまり、J または YYYY) が含まれない。 この場合、現在の年が使用されます。
- format-string が定数で、月を完全に定義するフォーマット・エレメント (例えば、J、MM、MONTH、または MON) が含まれない。 この場合、現在の月が使用されます。
特殊レジスターの値に依存するこれらの呼び出しは、特殊レジスターが使用不可の場合には使用できません。
- 「D」、「Y」、および「y」フォーマット・エレメントの使用:
- Db2 for z/OS® 他のプラットフォームでサポートされている「DY」、「dy」、および「Dy」形式要素はサポートしていません。 「DY」または「Dy」がフォーマット・ストリングに指定されている場合、「D」フォーマット・エレメントに続けて「Y」または「y」フォーマット・エレメントがあるものとして解釈されます。 この動作は、今後のリリースで変更される可能性があります。 「D」に続く「Y」または「y」が、2 つの個別のフォーマット・エレメントとして解釈されるようにするには、「D」フォーマット・エレメントの後に区切り文字を含めてください。
- 代替構文:
TO_TIMESTAMPはTIMESTAMP_FORMATと同義語です。
TO_DATE は TIMESTAMP_FORMAT の同義語です。
例
- 例 1:
- 2000 年が始まる 1 秒前 (1999 年 12 月 31 日 23 時 59 分 59 秒) にあたる受信タイム・スタンプで、IN_TRAY 表に行を挿入します。
INSERT INTO IN_TRAY (RECEIVED) VALUES (TIMESTAMP_FORMAT('1999-12-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS')) - 例 2:
- アプリケーションで、日付情報のストリングが INDATEVAR という変数に受け取られます。 この値は厳密にはフォーマット設定されていなく、また年に 2 桁または 4 桁の数字、月と日に 1 桁または 2 桁の数字が含まれています。 日付の各構成要素は負符号 (-) またはスラッシュ (/) 文字で分離され、日、月、および年の順序であることが予期されています。 時間情報は、時 (24 時間形式) および分で構成され、通常コロンで分離されています。 サンプル値としては、'15/12/98 13:48' や '9-3-2004 8:02' などがあります。 このような値を IN_TRAY 表に挿入します。
INSERT INTO IN_TRAY (RECEIVED) VALUES (TIMESTAMP_FORMAT(:INDATEVAR, 'DD/MM/RRRR HH24:MI'))フォーマットで 'RRRR' を使用すると、2 桁と 4 桁の年の値が考慮され、現在の年に基づいて欠落している最初の 2 桁が割り当てられます。 'YYYY' を使用すると、2 桁の年の入力値には先行ゼロが設定されます。 また、スラッシュ区切り文字では負符号 (-) 文字も許可されます。 現在の年が 2007 年であるとすると、サンプル値の結果として生成されるタイム・スタンプ値は以下のとおりです。'15/12/98 13:48' --> 1998-12-15-13.48.00.000000 '9-3-2004 8:02' --> 2004-03-09-08.02.00.000000
