PERIOD
PERIODとは固定された期間であり、その期間内の連続した時間の粒度のセットを表わします。これには開始境界(開始構成要素の値で定義される)と終了境界(終了構成要素の値で定義される)があります。期間の表現は、包括的で排他的です。つまり、PERIODは開始境界から開始しますが、終了境界は含みません。次の図は、2006年2月1日から2006年2月10日までの9日間の期間を表わしています。PERIODは2006年2月1日を含み開始しますが、2006年2月10日は含みません。
要素型
PERIODデータ型の構成要素の型は、そのPERIODデータ型の値の、開始および終了構成要素のデータ型です。構成要素の型は、あらゆる日付/時刻データ型になります。日付/時刻データ型は、DATE、TIME、およびTIMESTAMPなどです。TIMEおよびTIMESTAMPデータ型には、秒のフィールドに秒数の小数点以下の桁数(0から6)があります。これは指定することもできますが、デフォルトでは6です(例、TIME(3)およびTIMESTAMP(6))。これらには、WITH TIME ZONEによって指定されたタイムゾーンのフィールドを明示的に含めることもできます(WITH TIME ZONEが指定されていない場合、タイムゾーンのフィールドは暗黙的に含まれません)。
構成要素のタイプは、期間の開始と終了の構成要素で同じになる必要がある点に注意してください。
PERIODデータ型の比較
2つの期間値の構成要素のタイプが日付/時刻データ型と同じ場合、これらの値を比較することができます。日付/時刻データ型は、DATE、TIME、およびTIMESTAMPなどです。
データ型 | 比較対象 |
---|---|
PERIOD(DATE) | PERIOD(DATE)データ型 |
PERIOD(TIME(n) [WITH TIME ZONE]) | PERIOD(TIME(m) [WITH TIME ZONE])データ型 |
PERIOD(TIMESTAMP(n) [WITH TIME ZONE]) | PERIOD(TIMESTAMP(m) [WITH TIME ZONE])データ型 |
Teradataはこれを拡張して、CHARACTER値とVARCHAR値をいくつかの演算子に対してPERIODデータ型として暗黙にキャストできるようにし、これにより、PERIODデータ型を持つことができるようにしています。PERIODデータ型は他のオペランドのデータ型なので、これらのオペランドは比較対象になります。
日付/時刻およびPERIODデータは最大6の精度で内部的に保存されますが、指定された精度がこれより少ない場合はゼロが挿入されることに注意してください。したがって、異なる精度の比較演算子は、追加のロジックなしで機能します。さらに、内部値は、時刻またはタイムスタンプ値についてはUTCに保存され、期間値については、TIMEまたはTIMESTAMPの構成要素のタイプで保存されます。この内部表現により、すべての比較対象オペランドは直接比較することができます。タイムゾーン値を含むかどうかや、これらの精度が同じかどうかは関係ありません。値を比較するときにはタイムゾーン値が無視されることに注意してください。
演算子の割当て
次のどちらかがあてはまる場合、値はPERIODタイプのターゲットにのみ代入できます。
- ソースとターゲットの両方が、同じ構成要素のタイプのPERIODデータ型を持っています。つまり、どちらの構成要素のタイプも同じDATE、TIME、TIMESTAMPです。
- 暗黙にソース(CHARACTER またはVarcharデータ型が必須)をターゲットのデータ型としてキャストできます。この場合、ソースは割当ての前に、データ型として暗黙にキャストされます。
さらに、ターゲットの精度はソースの精度より低くなければなりません。
期間値は、PERIODデータ型のないターゲットには代入できません。
時間の粒度
時間の粒度(または単に粒度)は、与えられた精度で表わすことができる最小の間隔です。例えば、期間の構成要素のタイプがDATEの場合、粒度は1日(つまりINTERVAL '1' DAY)です。期間の構成要素のタイプがTIME(0)の場合、粒度は1秒(つまりINTERVAL '1' SECOND)です。期間の構成要素のタイプがTIMESTAMP(2)の場合、粒度は1秒の1/100(つまりINTERVAL '0.01' SECOND)です。
最後の値
PERIODの最後の値は構成要素のタイプで最も大きな値になりますが、期間の終了構成要素の値より小さくなります。つまり、最後の値は、(終了境界) - (1構成要素のタイプの粒度)、になります。
期間
期間の継続時間は1期間の粒度の数であり、間隔で表わされます。