SQL 解説書

結果のデータ・タイプに関する規則

結果のデータ・タイプは、 演算のオペランドに適用される規則によって決定されます。 ここでは、そのような規則について説明します。

これらの規則は以下に適用されます。

これらの規則は、さまざまな演算での長ストリングに関するその他の制限にも従って、適用されます。

さまざまなデータ・タイプに関係する規則を以下に示します。 一部については、考えられる結果データ・タイプを表に示します。

それらの表では、適用される長さまたは精度と位取りも含めて、結果データ・タイプを示します。 結果タイプは、オペランドを考慮して決定されます。 オペランドの対が複数の場合は、まず最初の対から検討します。 それによる結果タイプとその次のオペランドとの組み合わせが検討されて、 次の結果タイプが決定される、というようになります。 最後の中間結果タイプと最後のオペランドによって、その演算の最終的な結果タイプが決定されます。 演算処理は左から右へ行われます。 このため、演算が繰り返されるときは、中間結果タイプが重要になります。 たとえば、以下のような演算を考えてみます。

   CHAR(2) UNION CHAR(4) UNION VARCHAR(3)

最初の対の結果のタイプは CHAR(4) です。 この結果の値は常に 4 文字になります。 最終的な結果タイプは VARCHAR(4) です。 最初の UNION 演算の結果の値は、常に長さが 4 になります。

文字ストリング

文字ストリングは他の文字ストリングと互換性があります。 文字ストリングには、CHAR、VARCHAR、LONG VARCHAR、および CLOB データ・タイプが含まれます。


一方のオペランド 他方のオペランド 結果のデータ・タイプ
CHAR(x) CHAR(y) CHAR(z)、ただし z = max(x,y)
CHAR(x) VARCHAR(y) VARCHAR(z)、ただし z = max(x,y)
VARCHAR(x) CHAR(y) または VARCHAR(y) VARCHAR(z)、ただし z = max(x,y)
LONG VARCHAR CHAR(y)、VARCHAR(y)、または LONG VARCHAR LONG VARCHAR
CLOB(x) CHAR(y)、VARCHAR(y)、または CLOB(y) CLOB(z)、ただし z = max(x,y)
CLOB(x) LONG VARCHAR CLOB(z)、ただし z = max(x,32700)

結果の文字ストリングのコード・ページは、 ストリング変換に関する規則に基づいて導き出されます。

漢字ストリング

漢字ストリングは他の漢字ストリングと互換性があります。 漢字ストリングには、GRAPHIC、VARGRAPHIC、LONG VARGRAPHIC、および DBCLOB データ・タイプが含まれます。


一方のオペランド 他方のオペランド 結果のデータ・タイプ
GRAPHIC(x) GRAPHIC(y) GRAPHIC(z)、ただし z = max(x,y)
VARGRAPHIC(x) GRAPHIC(y) または VARGRAPHIC(y) VARGRAPHIC(z)、ただし z = max(x,y)
LONG VARGRAPHIC GRAPHIC(y)、VARGRAPHIC(y)、または LONG VARGRAPHIC LONG VARGRAPHIC
DBCLOB(x) GRAPHIC(y)、VARGRAPHIC(y)、または DBCLOB(y) DBCLOB(z)、ただし z = max(x,y)
DBCLOB(x) LONG VARGRAPHIC DBCLOB(z)、ただし z = max(x,16350)

結果の漢字ストリングのコード・ページは、ストリング変換に関する規則に基づいて導き出されます。

2 進ラージ・オブジェクト (BLOB)

BLOB は別の BLOB とのみ互換であり、結果は BLOB になります。 BLOB タイプとして扱う必要がある場合 (BLOBを参照)、 BLOB スカラー関数を使用して他のタイプからキャストしなければなりません。 結果の BLOB の長さは、すべてのデータ・タイプの中で最大の長さです。

数値

数値タイプは他の数値タイプと互換性があります。 数値タイプには、 SMALLINT、INTEGER、BIGINT、DECIMAL、REAL および DOUBLE が含まれます。


一方のオペランド 他方のオペランド 結果のデータ・タイプ
SMALLINT SMALLINT SMALLINT
INTEGER INTEGER INTEGER
INTEGER SMALLINT INTEGER
BIGINT BIGINT BIGINT
BIGINT INTEGER BIGINT
BIGINT SMALLINT BIGINT
DECIMAL(w,x) SMALLINT
DECIMAL(p,x)、ただし
p = x+max(w-x,5)1

DECIMAL(w,x) INTEGER
DECIMAL(p,x)、ただし
p = x+max(w-x,11)1

DECIMAL(w,x) BIGINT
DECIMAL(p,x)、ただし
p = x+max(w-x,19)1

DECIMAL(w,x) DECIMAL(y,z)
DECIMAL(p,s)、ただし
p = max(x,z)+max(w-x,y-z)1s
= max(x,z)

REAL REAL REAL
REAL DECIMAL、BIGINT、 INTEGER、またはSMALLINT DOUBLE
DOUBLE 任意の数値 DOUBLE
注:1. 精度は 31 以下でなければなりません。

DATE (日付)

日付は、別の日付、 または日付の有効なストリング表記を値とする任意の CHAR または VARCHAR 式と互換性があります。 結果のデータ・タイプは DATE です。

TIME (時刻)

時刻は、別の時刻、 または時刻の有効なストリング表記を値とする任意の CHAR または VARCHAR 式と互換性があります。 結果のデータ・タイプは TIME です。

TIMESTAMP (タイム・スタンプ)

タイム・スタンプは、別のタイム・スタンプ、 またはタイム・スタンプの有効なストリング表記を値とする任意の CHAR または VARCHAR 式と互換性があります。 結果のデータ・タイプは TIMESTAMP です。

DATALINK (データ・リンク)

データ・リンクはほかのデータ・リンクと互換性があります。 結果のデータ・タイプは DATALINK です。 結果の DATALINK の長さは、すべてのデータ・タイプの中で最大の長さです。

ユーザー定義タイプ

特殊タイプ

ユーザー定義特殊タイプは同じユーザー定義特殊タイプとしか互換性がありません。 結果のデータ・タイプはそのユーザー定義特殊タイプです。

参照タイプ

参照タイプは、ほかの参照タイプと互換性がありますが、 それは両方のターゲット・タイプが共通のスーパータイプを持っている場合に限ります。 結果のデータ・タイプは、 共通のスーパータイプをターゲット・タイプとして持っている参照タイプです。 すべてのオペランドに同じ効力範囲の表がある場合、 結果は効力範囲の表になります。 それ以外の場合、結果では効力範囲は指定されません。

構造タイプ

構造タイプは、ほかの構造タイプと互換性がありますが、 それは両方が共通のスーパータイプを持っている場合に限ります。 結果の構造タイプ列の静的データ・タイプは、 いずれかの列の最小限の共通スーパータイプである構造タイプです。

たとえば、以下の構造タイプ階層について考えてみます。

      A
     / \
    B   C
   / \
  D   E
 / \
F   G

静的タイプ E と F の構造タイプは、結果の静的タイプ B と互換性があります。 ただし、E および F の最小限の共通スーパータイプです。

結果のヌル可能属性

INTERSECT と EXCEPT を除き、 2 つのオペランドの両方ともヌル値が使用できないのでない限り、 結果でヌル値が可能です。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]