スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス

[目次][索引][前へ][次へ]

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

変換(代入,比較)できるデータ型を次の表に示します。ただし,CAST指定,及びスカラ関数を使用して変換できるデータ型については,それぞれ「2.16 スカラ関数」,「2.25 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 Version 8 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文については,「4. 操作系SQL」を,探索条件については,「2.7 探索条件」を参照してください。

注※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のサブタイプの値の場合に,代入できます。