フィールドをTIMESTAMP値として識別します。
構文
TIMESTAMP [ ( fractional_seconds_precision ) ] [ attributes [...] ]
- fractional_seconds_precision
- SECONDフィールドの小数部の有効桁数を表わす1桁の数字。
- attributes
- 適切なデータ型、列記憶、または列制約属性。
ANSI準拠
TIMESTAMPは、非ANSI規格です。Teradata DatabaseはUTCでTIMESTAMP値を格納します。
TIMESTAMPの内部表現
概念的には、TIMESTAMPはグレゴリオ暦で正しく定義された6つのフィールドで構成されたレコードとして扱われます。
フィールド名 | 最小値 | 最大値 | 格納形式 |
---|---|---|---|
SECOND | 00.000000 | 61.999999 この値は、時計に追加できるうるう秒を考慮に入れます。 |
INTEGER (DECIMAL(8,6)) |
YEAR | 0001 | 9999 | SMALLINT |
MONTH | 01 | 12 | BYTEINT |
DAY | 01 | 28、29、30、または31 (月と年に対応) |
BYTEINT |
HOUR | 00 | 23 | BYTEINT |
MINUTE | 00 | 59 | BYTEINT |
レコードは数値フィールドで構成されていますが、数値として処理されません。
内部格納形式の長さは10バイトです。
TIMESTAMPの外部表現
TIMESTAMPタイプは、レコードおよび標識モードでCHARACTERデータとしてインポートおよびエクスポートされます。その際、ANSI形式文字列とサイト定義のクライアント文字セットが使用されます。
fractional_seconds_precisionの値 | タイプ | 形式 |
---|---|---|
0 | CHAR(19) | 'yyyy-mm-dd hh:mi:ss' |
n nは通常1~6 |
CHAR(20+n) | 'yyyy-mm-dd hh:mi:ss.ss…' |
次の表は、レコードおよび標識モードでTIMESTAMPタイプをエクスポートする方法を示すものです。
fractional_seconds_precisionの値 | 長さ | 例 |
---|---|---|
6 | 26 | '1999-01-01 23:59:59.999999' |
0 | 19 | '1999-01-01 23:59:59' |
TIMESTAMPの形式
TIMESTAMPの形式と形式の変更方法の詳細については、TIMEおよびTIMESTAMPの形式を参照してください。
TIMESTAMPの暗黙の変換と明示的な変換
割り当てや比較中に、Teradata DatabaseはCHARACTERタイプからTIMESTAMPタイプへの暗黙の変換を実行します。この変換は、CHARおよびVARCHARタイプでのみサポートされます。CLOBまたはCHAR/VARCHAR CHARACTER SET GRAPHICの文字データ型をTIMESTAMPに変換することはできません。
Teradata DatabaseはTIMESTAMPタイプからDATEタイプおよびTIMEタイプへの暗黙の変換も実行します。ただし、TIMESTAMPからTIMEへの暗黙の変換は、比較ではサポートされていません。
CASTを使用することにより、明示的にCHARACTERタイプをTIMESTAMPタイプに変換したり、TIMESTAMPタイプからDATEまたはTIMEタイプに変換することができます。
詳細については、<Teradata Vantage™ - SQL関数、式、および述部、B035-1145>の「データ型の変換」を参照してください。
例: TIMESTAMPデータ型
以下に示すのは、クエリーの中でTIMESTAMPを使用した例です。
SELECT item, quantity, saletime FROM sales WHERE saletime > TIMESTAMP '2000-08-25 10:14:59' AND saletime < TIMESTAMP '2000-08-25 10:30:01';
例: 2つのTIMESTAMP型の相違
2つのTIMESTAMPタイプの間の差は間隔タイプになります。
まず、テーブルを次のように定義します。
CREATE TABLE BillDateTime (phone_no CHARACTER(10) ,start_time TIMESTAMP(0) ,end_time TIMESTAMP(0));
次に差を計算し、その結果の間隔単位としてDAY TO SECONDを指定します。
SELECT (end_time - start_time) DAY(4) TO SECOND FROM BillDateTime;
DAY(4)により4桁の精度を指定しており、最大値は9999日(約27年)になります。結果は次のようになります。
5 16:49:20.340000
例: 2つのTIMESTAMP値の比較
次の例は、2つのTIMESTAMP数値を比較して、その差が30分未満かどうかを調べるものです。
まず、テーブルを次のように定義します。
CREATE TABLE PhoneTime (phone_no CHARACTER(10) ,start_time TIMESTAMP(0) ,end_time TIMESTAMP(0));
2つのTIMESTAMPタイプの間の差は、間隔タイプになります。
SELECT phone_no FROM PhoneTime WHERE (end_time - start_time) DAY(4) TO MINUTE > INTERVAL '30' MINUTE;