場合によっては、VARDATEの形式変更機能は、提供されるFORMATIN文字列に明示的に一致しないDateTimeデータを受け入れます。 こうしたケースはまれですが、VARDATEの形式変更機能の利便性を拡張するために実装されました。
2桁の月、曜日、時間、秒、分の形式化文字がFORMATIN文字列に入力され、基になるデータ内の一致する値が1桁である場合、データがFORMATOUT文字列で指定されている形式に変換される前にゼロが1桁の値の先頭に付けられます。 完全な曜日名形式化文字がFORMATIN文字列に入力され、基になるデータ内の一致する値が省略された曜日名である場合、省略された曜日名が受け入れられます。 同様に、省略された曜日名形式化文字がFORMATIN文字列に入力され、基になるデータ内の一致する値が完全な曜日名である場合、その完全な曜日名が受け入れられます。
VARDATE変換
VARDATE変換は、FORMATINに指定された入力文字列の終了時にデータが欠落している場合に、FORMATINで指定された以下の書式設定文字で柔軟に実行することができ、デフォルト設定されています。
書式設定文字列 | 説明 | 対応するデータが欠落している場合の結果 |
---|---|---|
YY | 2桁の年数 | "00"は処理されて2000になる |
HH | 2桁の時間数 | "00"は処理される |
MI | 2桁の分数 | "00"は処理される |
SS | 2桁の秒数 | "00"は処理される |
SS.S (N) | 2桁の秒の後に小数秒が続く | "00.000000"は処理される |
T | 12時間形式の使用 | "am"は処理される |
Z | タイム ゾーン | "+00.00"は処理される |
入力文字列の先頭または途中部分でVARDATEデータが欠落している場合でも、入力文字列のどの部分が実際に欠落しているかが不明確な場合があるため、エラーが発生します。また、VARDATE入力文字列がまったく存在しない場合は、データが欠落しているとは見なされず、NULL列と見なされます(例: 以下の例の最後の行)。
例えば、次のスキーマ定義について考えます。
DEFINE SCHEMA PRODUCT_TABLE_SCHEMA DESCRIPTION 'PRODUCT INFORMATION SCHEMA' ( COL1 VARCHAR(10), COL2 VARDATE(30) FORMATIN('YYYY/MMM/DDBHH/MI/SS.S(6)') FORMATOUT('YYYY-MM-DDBHH:MI:SS.S(6)'), COL3 VARCHAR(10) ); Now consider the following delimited data: aaa,2001/Jan/01 01/01/01.123456,AAA bbb,2002/Feb/02 02/02/02,BBB ccc,2003/Mar/03 03/03/,CCC ddd,2004/Apr/04 04/04,DDD eee,2005/May/05 05/,EEE fff,2006/Jun/06 06,FFF ggg,2007/Jul/07 ,GGG hhh,2008/Aug/08,HHH iii,,III
このデータをテーブルに挿入すると、次のようになります。
COL001 COL002 COL003 ---------- -------------------------- ---------- aaa 2001-01-01 01:01:01.123456 AAA bbb 2002-02-02 02:02:02.000000 BBB ccc 2003-03-03 03:03:00.000000 CCC ddd 2004-04-04 04:04:00.000000 DDD eee 2005-05-05 05:00:00.000000 EEE fff 2006-06-06 06:00:00.000000 FFF ggg 2007-07-07 00:00:00.000000 GGG hhh 2008-08-08 00:00:00.000000 HHH iii ? III