Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


1.2.2 変換(代入,比較)できるデータ型

変換(代入,比較)できるデータ型を次の表に示します。ただし,CAST指定,及びスカラ関数を使用して変換できるデータ型については,それぞれ「スカラ関数」,「CAST指定」を参照してください。

表1‒5 変換(代入,比較)できるデータ型(1/2)

変換前データ型

変換後データ型

数データ

文字データ

各国文字データ

混在文字データ

日付データ

時刻データ

時刻印データ

INTEGER

CHARACTER

NCHAR

MCHAR

DATE

TIME

TIMESTAMP

SMALLINT

DECIMAL

VARCHAR

NVARCHAR

MVARCHAR

FLOAT

SMALLFLT

DF

EK

U16

数データ

  • INTEGER

  • SMALLINT

  • DECIMAL

  • FLOAT

  • SMALLFLT

○,○

○,×※1

×,×

○,×※1

×,×

×,×

×,×

文字データ

  • CHARACTER

  • VARCHAR

DF

△,△※2※3

○,○

△,△

※14

△,△

※17

△,△※7

○,○

△,△※4

△,△※5

△,△※6

EK

△,×

※15

○,○

×,×

×,×

×,×

U16

△,△※16

×,×

○,○

×,×

△,△

※16

各国文字データ

  • NCHAR

  • NVARCHAR

×,×

×,×

○,○

×,×

×,×

×,×

×,×

混在文字データ

  • MCHAR

  • MVARCHAR

△,△※2※3

○,○

×,×

△,△

※17

×,×

○,○

×,×

×,×

×,×

日付データ

  • DATE

×,×

×,△※8

×,×

×,×

○,○

×,×

×,×

時刻データ

  • TIME

×,×

×,△※9

×,×

×,×

×,×

○,○

×,×

時刻印データ

  • TIMESTAMP

×,×

×,△※10

×,×

×,×

×,×

×,×

○,○※11

日間隔データ

  • INTERVAL YEAR TO DAY

×,△※12

×,×

×,×

×,×

×,×

×,×

×,×

時間隔データ

  • INTERVAL HOUR TO SECOND

×,△※13

×,×

×,×

×,×

×,×

×,×

×,×

長大データ

  • BLOB

×,×

×,×

×,×

×,×

×,×

×,×

×,×

バイナリデータ

  • BINARY(n)

    1≦n≦32,000

×,×

×,×

×,×

×,×

×,×

×,×

×,×

バイナリデータ

  • BINARY(n)

    n>32,000

×,×

×,×

×,×

×,×

×,×

×,×

×,×

論理データ

  • BOOLEAN

×,×

×,×

×,×

×,×

×,×

×,×

×,×

抽象データ型

×,×

×,×

×,×

×,×

×,×

×,×

×,×

(凡例)

○:変換できます。

△:制限付きで変換できます。

×:変換できません。

DF:既定文字集合

EK:EBCDIK

U16:UTF16,UTF-16LE又はUTF-16BE

文字集合名UTF-16LE,UTF-16BEは,次の場合に指定してください。

  • ?パラメタを介して文字コードがUTF-16のデータを操作する場合

  • プリプロセスオプション,及び埋込み変数の定義に,文字コードがUTF-16のデータを操作できるように指定し,埋込み変数を介して文字コードがUTF-16のデータを操作する場合

文字集合UTF-16LE及びUTF-16BE(文字集合名記述領域のSQLCSNに設定できる文字集合情報)については,マニュアル「HiRDB UAP開発ガイド」を参照してください。

表中の変換可否は,「代入可否,比較可否」となっています。例えば,「○,○」の場合は代入及び比較ができて,「○,×」の場合は代入はできるが比較はできないということになります。

注※1

数データを文字データに変換する場合の対応関係を次に示します。なお,変換後のデータ型が混在文字データの場合は,VARCHARをMVARCHARに,CHARをMCHARに読み替えてください。

  • INTEGER型の数データは,VARCHAR(11)の文字データに変換されます。

  • SMALLINT型の数データは,VARCHAR(6)の文字データに変換されます。

  • DECIMAL(p,0)型の数データは,VARCHAR(p+1)の文字データに変換されます。

  • DECIMAL(p,s)型の数データは,VARCHAR(p+2)の文字データに変換されます。

  • FLOAT型又はSMALLFLT型の数データは,CHAR(23)の文字データに変換されます。

INTEGER型,SMALLINT型,及びDECIMAL型での数データが正の場合,変換された文字データには正の符号は含みません。また,FLOAT型及びSMALLFLT型の数データを文字データに変換する場合,指数部と仮数部に必ず符号を付加します。

注※2

文字データと数データを比較する場合,文字データを数データに変換して比較をします。文字データと数データを比較できるのは,比較述語,限定述語,IN述語,及びBETWEEN述語です。各述語ごとの比較可能な条件を次に示します。

述語

比較可能な条件

比較述語

左右のどちらかが数データの場合に比較できます。

IN述語,限定述語

左側が数データの場合に比較できます。

BETWEEN述語

行値構成子1の行値構成子要素が数データの場合に比較できます。

文字データと数データを比較できるのは,以下に示す指定をした場合です。

<文字データ>
  • 定数(副問合せの選択式に指定した場合を含む)

  • ?パラメタ

  • 埋込み変数

  • SQL変数

  • SQLパラメタ

ただし,文字データ又は数データを,以下に示す位置に指定した場合は,SQL変数,SQLパラメタで指定した文字データを,数データに変換できません。

  • 行値構成子要素数が2以上である行値構成子中の行値構成子要素

  • 行副問合せ,又は表副問合せの選択式

  • 比較述語の右側,IN述語の右側,限定述語の右側以外に指定したスカラ副問合せの選択式

<数データ>
  • 列指定(副問合せの選択式に指定した場合を含む)

注※3

文字データを数データに代入,比較する場合の対応関係を次に示します。

  • 整数の文字列表現は,INTEGER型に変換されます。

  • 10進数の文字列表現は,DECIMAL型に変換されます。

  • 浮動小数点数の文字列表現は,FLOAT型に変換されます。

数の文字列表現の前後に空白がある場合,空白を無視して変換をします。

注※4

次に示すものは,日付データへの代入,及び日付データとの比較ができます。

  • 日付を既定の文字列で表現した定数

  • CHAR(10)に対応する埋込み変数(ただし,埋込み変数の文字集合がUTF16,UTF-16LE,又はUTF-16BEの場合はCHAR(20)に対応する埋込み変数)

注※5

次に示すものは,時刻データへの代入,及び時刻データとの比較ができます。

  • 時刻を既定の文字列で表現した定数

  • CHAR(8)に対応する埋込み変数(ただし,埋込み変数の文字集合がUTF16,UTF-16LE,UTF-16BEの場合はCHAR(16)に対応する埋込み変数)

注※6

次に示すものは,時刻印データとの比較,及び時刻印データへの変換ができます。

  • 時刻印を既定の文字列表現で指定した定数

  • 長さが19〜26バイトのCHARに対応する埋込み変数(ただし,埋込み変数の文字集合がUTF16,UTF-16LE,UTF-16BEの場合は長さが38〜52バイトのCHARで,長さが2の倍数に対応する埋込み変数)

注※7

定義系SQLを除く,次に示す項目で文字列定数を記述した場合,各国文字列定数とみなし,文字データの長さだけをチェックし,文字コードはチェックしません。

  • INSERT文

  • UPDATE文

  • 探索条件

INSERT文,及びUPDATE文については,「操作系SQL」を,探索条件については,「探索条件」を参照してください。

注※8

次に示すものは,日付データと比較できます。

  • 日付を既定の文字列で表現した定数

  • CHAR(10)に対応する埋込み変数(ただし,埋込み変数の文字集合がUTF16,UTF-16LE,又はUTF-16BEの場合はCHAR(20)に対応する埋込み変数)

また,次の場合は,文字データに変換できます。

  • 日付データを,長さが10バイト以上のCHAR,又はVARCHARの埋込み変数に代入した場合(ただし,埋込み変数の文字集合がUTF16,UTF-16LE,又はUTF-16BEの場合は,長さが20バイト以上で長さが2の倍数のCHAR,又はVARCHARの埋込み変数に代入した場合)

注※9

次に示すものは,時刻データと比較できます。

  • 時刻を既定の文字列で表現した定数

  • CHAR(8)に対応する埋込み変数(ただし,埋込み変数の文字集合がUTF16,UTF-16LE,又はUTF-16BEの場合はCHAR(16)に対応する埋込み変数)

また,次の場合は,文字データに変換できます。

  • 時刻データを,長さが8バイト以上のCHAR,又はVARCHARの埋込み変数に代入した場合(ただし,埋込み変数の文字集合がUTF16,UTF-16LE,又はUTF-16BEの場合は,長さが16バイト以上で長さが2の倍数のCHAR,又はVARCHARの埋込み変数に代入した場合)

注※10

次に示すものは,時刻印データと比較できます。

  • 時刻印を既定の文字列表現で指定した定数

  • 長さが19〜26バイトのCHARに対応する埋込み変数(ただし,埋込み変数の文字集合がUTF16,UTF-16LE,又はUTF-16BEの場合は長さが38〜52バイトで長さが2の倍数のCHARに対応する埋込み変数)

また,次の場合は文字データに代入できます。

  • 変換前の時刻印データの小数秒精度をpとした場合,p=0の場合は19バイト以上,p>0の場合は20+pバイト以上の,CHAR又はVARCHARの埋込み変数への代入(ただし,埋込み変数の文字集合がUTF16,UTF-16LE,又はUTF-16BEの場合は,変換前の時刻印データの小数秒精度をpとした場合,p=0の場合は38バイト以上,p>0の場合は40+2pバイト以上で長さが2の倍数の,CHAR又はVARCHARの埋込み変数への代入)

注※11

代入元の小数秒精度が代入先の小数秒精度より高い場合,代入先の精度に合わせて小数行部分を切り捨てます。代入元の小数秒精度が代入先の代入先の小数秒精度より低い場合,代入先の精度に合わせて拡張した小数秒部分に0を補って格納します。

注※12

次に示すものは,日間隔データと比較できます。

  • 日間隔を10進数で表現した定数

  • DECIMAL(8,0)に対応する埋込み変数

また,次の場合は,10進数データに変換できます。

  • 日間隔データを,DECIMAL(8,0)の埋込み変数に代入した場合

注※13

次に示すものは,時間隔データと比較できます。

  • 時間隔を10進数で表現した定数

  • DECIMAL(6,0)に対応する埋込み変数

また,次の場合は,10進数データに代入できます。

  • 時間隔データを,DECIMAL(6,0)の埋込み変数に代入した場合

注※14

変換前の項目として次に示すものは,代入対象,比較対象の文字集合に変換するため,代入,比較できます。

  • 文字列定数

  • 埋込み変数(既定文字集合)

注※15

変換後の項目として次に示すものは,代入対象の文字集合に変換するため,代入できます。

  • 埋込み変数(既定文字集合)

注※16

変換後の項目として次に示すものは,代入対象,比較対象の文字集合に変換するため,代入,比較できます。

  • 埋込み変数(既定文字集合)

変換前の項目として次に示すものは,代入対象,比較対象の既定文字集合に変換するため,代入,比較できます。

  • 埋込み変数(UTF16,UTF-16LE,又はUTF-16BE)

注※17

変換前の項目として次に示すものは,代入対象,比較対象の文字集合に変換するため,代入,比較できます。

  • 文字列定数

  • 埋込み変数(既定文字集合)

変換後の項目として次に示すものは,代入対象の文字集合に変換するため,代入できます。

  • 埋込み変数(UTF16,UTF-16LE,又はUTF-16BE)

表1‒6 変換(代入,比較)できるデータ型(2/2)

変換前データ型

変換後データ型

日間隔データ

時間隔データ

長大データ

バイナリデータ

論理データ

抽象データ型

INTERVAL YEAR TO DAY

INTERVAL HOUR TO SECOND

BLOB

BINARY(n)

1≦n≦32,000

BINARY(n)

n>32,000

BOOLEAN

数データ

  • INTEGER

  • SMALLINT

  • DECIMAL

  • FLOAT

  • SMALLFLT

△,△※1

△,△※2

×,×

×,×

×,×

×,×

×,×

文字データ

  • CHARACTER

  • VARCHAR

DF

×,×

×,×

×,×

△,△※3

×,×

×,×

×,×

EK

×,×

U16

各国文字データ

  • NCHAR

  • NVARCHAR

×,×

×,×

×,×

×,×

×,×

×,×

×,×

混在文字データ

  • MCHAR

  • MVARCHAR

×,×

×,×

×,×

×,×

×,×

×,×

×,×

日付データ

  • DATE

×,×

×,×

×,×

×,×

×,×

×,×

×,×

時刻データ

  • TIME

×,×

×,×

×,×

×,×

×,×

×,×

×,×

時刻印データ

  • TIMESTAMP

×,×

×,×

×,×

×,×

×,×

×,×

×,×

日間隔データ

  • INTERVAL YEAR TO DAY

○,○※4

×,×

×,×

×,×

×,×

×,×

×,×

時間隔データ

  • INTERVAL HOUR TO SECOND

×,×

○,○※5

×,×

×,×

×,×

×,×

×,×

長大データ

  • BLOB

×,×

×,×

○,×

○,×

○,×

×,×

×,×

バイナリデータ

  • BINARY(n)

    1≦n≦32,000

×,×

×,×

○,×

○,○

○,×

×,×

×,×

バイナリデータ

  • BINARY(n)

    n>32,000

×,×

×,×

○,×

○,×

○,×

×,×

×,×

論理データ

  • BOOLEAN

×,×

×,×

×,×

×,×

×,×

×,×

×,×

抽象データ型

×,×

×,×

×,×

×,×

×,×

×,×

△,×※6

(凡例)

○:変換できます。

△:制限付きで変換できます。

×:変換できません。

DF:既定文字集合

EK:EBCDIK

U16:UTF16,UTF-16LE又はUTF-16BE

表中の変換可否は,「代入可否,比較可否」となっています。例えば,「○,○」の場合は代入及び比較ができて,「○,×」の場合は代入はできるが比較はできないということになります。

注※1

次に示すものは,日間隔データへの代入,及び日間隔データとの比較ができます。

  • 日間隔を10進数で表現した定数

  • DECIMAL(8,0)に対応する埋込み変数

注※2

次に示すものは,時間隔データへの代入,及び時間隔データとの比較ができます。

  • 時間隔を10進数で表現した定数

  • DECIMAL(6,0)に対応する埋込み変数

注※3

次に示すものは,BINARY型への代入,及びBINARY型との比較ができます。

  • 16進文字列定数

注※4

日間隔データ同士の比較は,年,月,日の順で比較します。

注※5

時間隔データ同士の比較は,時,分,秒の順で比較します。

注※6

抽象データ型ADT2で定義された列,変数に対して,抽象データ型ADT1がADT2の値又はADT2のサブタイプの値の場合に,代入できます。