SQL Engine Reference (v11)

データ型に関する注意事項

このセクションでは、使用可能なデータ型に関するさまざまな動作およびキー情報について説明します。

CHAR、VARCHAR、および LONGVARCHAR

LONGVARCHAR と LONGVARBINARY の制約も参照してください。

BINARY および LONGVARBINARY

Pervasive PSQL では、1 つのテーブルで複数の LONGVARCHAR 列および LONGVARBINARY 列がサポートされるようになりました。データは、オフセットに応じてレコードの可変長部分に格納されます。データの可変長部分は、データの操作方法に応じて、データの列順とは異なるものにすることができます。次の例で考えてみましょう。

CREATE TABLE BlobDataTest 
( 
   Nbr   UINT,          // 固定レコード (型 14) 
   Clob1 LONGVARCHAR,   // 固定レコード (型 21) 
   Clob2 LONGVARCHAR,   // 固定レコード (型 21) 
   Blob1 LONGVARBINARY, // 固定レコード (型 21) 
) 

ディスク上では、物理レコードは通常次のように見えます。

[固定データ (Nbr, Clob1header, Clob2header, 
Blob1header)][ClobData1][ClobData2][BlobData1] 

列 Nbr を LONGVARCHAR 列に変更します。

ALTER TABLE BlobDataTest ALTER Nbr LONGVARCHAR 

これで、物理レコードはディスク上で次のように見えるようになりました。

[固定データ (Nbrheader, Clob1header, Clob2header, 
Blob1header)][ClobData1][ClobData2][BlobData1]
[NbrClobData] 

見たとおり、データの可変長部分は既存のデータの列順には入りません。

しかし、新しく挿入したレコードについては、データの可変長部分は既存のデータの列順に入ります。これは、すべての列にデータが割り当てられている(列がヌルでない)ことを前提としています。

[固定データ (Nbrheader, Clob1header, Clob2header, 
Blob1header)][NbrClobData][ClobData1][ClobData2]
[BlobData1] 

LONGVARCHAR と LONGVARBINARY の制約も参照してください。

LONGVARCHAR と LONGVARBINARY の制約

LONGVARCHAR および LONGVARBINARY データ型には次の制約が適用されます。

DATETIME

DATETIME データ型は日付と時刻の値を表します。このデータ型は内部的に 4 バイトの整数として格納されます。最初の 4 バイトは基準日である 1900 年 1 月 1 日より前または後の日数を格納します。あとの 4 バイトは、深夜 0 時からのミリ秒数で表すその日の時刻を格納します。

DATETIME データ型はインデック付けすることができます。DATETIME の精度は 1/1000 秒です。

DATETIME はリレーショナル データ型のみです。対応するトランザクショナルデータ型(Btrieve データ型)はありません。

DATETIME の書式

DATETIME に許可される書式は YYYY-MM-DD HH:MM:SS.mmm のみです (CONVERT 関数には DATETIME のミリ秒部分を切り捨てることができるオプション パラメーターがあります。「変換関数」の Convert 関数を参照してください)。

次の表に、DATETIME のデータ コンポーネントと有効な値を示します。

表 128 DATETIME コンポーネントおよび有効な値
コンポーネント
有効な値
YEAR(YYYY)
1753 ~ 9999
MONTH(MM)
01 から 12
DAY(DD)
01 から 31
HOUR(HH)
00 から 23
MONTH(MM)
00 から 59
SECOND(SS)
00 から 59
MILLISECOND(mmm)
000 から 999

データ型の互換性

次の表に、DATE、TIME、TIMESTAMP および DATETIME にほかのデータ型を加算または減算した結果のデータ型を示します。"X" 印の付けられたデータ型は、DATE、TIME、TIMESTAMP および DATETIME と互換性がありません。

表 129 DATE、DATETIME、TIME、および TIMESTAMP を含むオペランド
オペランド 2 →
オペランド 1 ↓
DATE
DATETIME
TIME
TIMESTAMP
BFLOAT4

DATETIME

TIMESTAMP
BFLOAT8

DATETIME

TIMESTAMP
BIGINT

DATETIME

BINARY

BIT

CHAR

CURRENCY

DATETIME

DATE

DATETIME

DECIMAL

DATETIME

DOUBLE

DATETIME

TIMESTAMP
IDENTITY

INTEGER
DATE
DATETIME

TIMESTAMP
LONGVARBINARY

LONGVARCHAR

MONEY

DATETIME

NUMERIC

DATETIME

NUMERICSA

NUMERICSLB

NUMERICSLS

NUMERICSTB

NUMERICSTS

REAL

DATETIME

TIMESTAMP
SMALLIDENTITY
DATE
DATETIME

TIMESTAMP
SMALLINT
DATE
DATETIME

TIMESTAMP
TIME

TIMESTAMP

TINYINT
DATE
DATETIME

TIMESTAMP
UBIGINT
DATE
DATETIME

TIMESTAMP
UINTEGER
DATE
DATETIME

TIMESTAMP
UNIQUEIDENTIFIER

USMALLINT
DATE
DATETIME

TIMESTAMP
UTINYINT
DATE
DATETIME

TIMESTAMP
VARCHAR

CONVERT および CAST 関数は、次の表に示すように DATE、DATETIME、TIME および TIMESTAMP と使用できます。

表 130 許可される CONVERT 操作
変換元
許可される結果のデータ型(変換先)
DATE
DATE、DATETIME、TIMESTAMP、VARCHAR
DATETIME
SQL_GUID、SQL_BINARY、および SQL_LONGVARBINARY 以外 SQL_xxxx データ型
TIME
TIME、DATETIME、TIMESTAMP、VARCHAR
TIMESTAMP
DATE、DATETIME、TIME、TIMESTAMP、VARCHAR
VARCHAR
DATE、DATETIME、TIME、TIMESTAMP


メモ

CONVERT 関数には DATETIME のミリ秒部分を切り捨てることができるオプション パラメーターがあります。「変換関数」の Convert 関数を参照してください。


表 131 許可される CAST 操作
キャスト元
許可される結果のデータ型(変換先)
DATE
DATE、DATETIME、TIMESTAMP、VARCHAR
DATETIME
任意のリレーショナル データ型
TIME
TIME、DATETIME、TIMESTAMP、VARCHAR
TIMESTAMP
DATE、DATETIME、TIME、TIMESTAMP、VARCHAR
VARCHAR
DATE、DATETIME、TIME、TIMESTAMP

UNIQUEIDENTIFIER

UNIQUEIDENTIFIER データ型は GUID(Globally Unique Identifier:グローバル一意識別子)として知られている 16 バイトのバイナリ値です。GUID は、行がほかの行と重複しない場合に有用です。

UNIQUEIDENTIFIER は、9.5 以上のファイル形式を必要とします。

UNIQUEIDENTIFIER の列またはローカル変数は、以下の方法で初期化できます。

引用符で囲んだ文字列を指定する場合、32 桁全部を指定する必要があります。データベース エンジンは部分文字列の埋め込み処理を行いません。

以下の比較演算子のみが UNIQUEIDENTIFIER に使用できます。

演算子
説明
=
等しい
<> または !=
等しくない
<
より小さい
>
より大きい
<=
小さいかまたは等しい
>=
大きいかまたは等しい
IS NULL
値はヌルです
IS NOT NULL
値はヌルではありません

2 つの値のビット パターンの比較によっては並べ替えは行われません。

変数を宣言する

SET ステートメントを使用して UNIQUEIDENTIFIER データ型の変数を宣言することができます。

DECLARE :Cust_ID UNIQUEIDENTIFIER DEFAULT NEWID() 
DECLARE :ISO_ID uniqueidentifier 
SET :ISO_ID = '1129619D-772C-AAAB-B221-00FF00FF0099' 

UNIQUEIDENTIFIER を別のデータ型に変換する

UNIQUEIDENTIFER は CAST または CONVERT スカラー関数使用して以下のデータ型のいずれかに変換できます。

変換の例については、「変換関数」を参照してください。

無限の表現

Pervasive PSQLで無限を表すには、次の表のように、4 バイト(C 言語の float 型)または 8 バイト(C 言語の double 型)の形式で、16 進数または文字として表現できます。

表 132 無限の表現
Float 16 進数
Float 文字
Double 16 進数
Double 文字
正の最大数
 
 
0x7FEFFFFFFFFFFFFF
 
負の最大数
 
 
0xFFEFFFFFFFFFFFFF
 
正の無限数
0x7F800000
1E999
0x7FF0000000000000
1E999
負の無限数
0xFF800000
-1E999
0xFFF0000000000000
-1E999


Pervasive PSQL で使用できるデータ型

旧データ型