Hitachi

Hitachi Advanced Database SQLリファレンス


6.2.2 変換,代入,比較できるデータ型

〈この項の構成〉

(1) 比較できるデータ型

比較できるデータ型の組み合わせを次の表に示します。

表6‒8 比較できるデータ型の組み合わせ

データ型

データ型の比較可否

数データ

文字データ

日時データ

バイナリデータ

論理データ

UUIDデータ

DATE

TIME

TIMESTAMP

時刻帯なし

時刻帯付き

数データ

×

×

×

×

×

×

×

×

文字データ

×

×

×

×

日時データ

DATE

×

×

×

×

×

×

TIME

×

×

×

TIMESTAMP(時刻帯なし)

×

×

TIMESTAMP(時刻帯付き)

×

×

×

バイナリデータ

×

×

×

×

×

×

×

×

論理データ

×

×

×

×

×

×

×

×

UUIDデータ

×

×

×

×

×

×

×

×

(凡例)

○:比較できます。

×:比較できません。

文字データの比較
  • 比較する文字データの長さが異なる場合は,短い方のデータの末尾に半角空白を補い,長さをそろえてから比較されます。

  • VARCHAR型同士の比較の場合でも,半角空白を補ってから比較されます。

  • STRING型同士の比較の場合でも,半角空白を補ってから比較されます。

  • VARCHAR型とSTRING型の比較の場合でも,半角空白を補ってから比較されます。

数データの比較

比較するデータのデータ型が異なる場合は,範囲の広い方のデータ型で比較されます。範囲の広さを次に示します。

DOUBLE PRECISION,FLOAT>REAL>DECIMAL,NUMERIC>BIGINT>INTEGER>SMALLINT

ただし,整数データ型のデータ形式がレガシー形式の場合,範囲の広さは次のようになります。

DOUBLE PRECISION,FLOAT>REAL>DECIMAL,NUMERIC>INTEGER,BIGINT>SMALLINT
日時データと文字データの比較

文字データが既定の入力表現で記述された定数の場合に限り,日時データと文字データを比較できます。既定の入力表現については,「6.3.3 既定の文字列表現」を参照してください。

  • 日付データと,日付を表す既定の入力表現で記述された文字列の比較ができます。日付を表す既定の入力表現を,文字データから日付データに変換します。その後,日付データ同士の比較を行います。

  • 日付データと,時刻印を表す既定の入力表現で記述された文字列の比較ができます。日付データに時刻0時0分0秒を補って時刻印データに変換します。また,時刻印を表す既定の入力表現を,文字データから時刻印データに変換します。その後,時刻印データ同士の比較を行います。

  • 時刻データと,時刻を表す既定の入力表現で記述された文字列の比較ができます。時刻を表す既定の入力表現を,文字データから時刻データに変換します。その後,時刻データ同士の比較を行います。

  • 時刻帯なしの時刻印データと,時刻帯なしの時刻印を表す既定の入力表現で記述された文字列の比較ができます。時刻帯なしの時刻印を表す既定の入力表現を,文字データから時刻帯なしの時刻印データに変換します。その後,時刻帯なしの時刻印データ同士の比較を行います。

  • 時刻帯付きの時刻印データと,時刻帯付きの時刻印を表す既定の入力表現で記述された文字列の比較ができます。時刻帯付きの時刻印を表す既定の入力表現を,文字データから時刻帯付きの時刻印データに変換します。その後,時刻帯付きの時刻印データ同士の比較を行います。

  • 時刻帯なしの時刻印データと日付を表す既定の入力表現で記述された文字列の比較ができます。日付を表す既定の入力表現に時刻0時0分0秒を補って時刻帯なしの時刻印データに変換します。その後,時刻帯なしの時刻印データ同士の比較を行います。

ただし,副問合せの選択式と,その選択式の比較相手となる値式は,比較することはできません。

日時データの比較
  • 日付データと時刻帯なしの時刻印データを比較する場合は,日付データを時刻帯なしの時刻印データに変換します。その際,時刻0時0分0秒が補われます。

  • 小数秒の桁数が異なる場合は,精度の高い方にそろえて,拡張した小数秒部分に0が補われます。

バイナリデータの比較
  • 比較するデータのデータ長が同じ場合は,すべてのバイト値が一致したときに,データが等しいと見なされます。

    (例)

    [図データ]

    上記の場合,「バイナリデータX=バイナリデータY」となります。

  • 比較するデータのデータ長が異なる場合は,次の2つの条件を満たす場合に,データが等しいと見なされます。

    ・データ長が短い方のデータに合わせて先頭バイトから比較した結果,すべてのバイト値が一致している

    ・データ長が長い部分のバイト値が,すべてX'00'である

    (例)

    [図データ]

    上記の場合,「バイナリデータX=バイナリデータY」となります。

  • データの先頭バイトから順に比較し,バイト値が異なるときにそのバイト値の大小を比較します。その結果によって,データの大小を決定します。

    (例)

    [図データ]

    上記の場合,「バイナリデータX<バイナリデータY」となります。

  • 比較するデータのデータ長が異なる場合で,かつ先頭バイトから短い方のデータ長分のバイト値が一致するときは,次のようにデータの大小を決定します。

    データ長が短いデータをXとし,データ長が長いデータをYとします。このとき,Yのデータの長い部分に,X'00'以外のバイト値が1つ以上ある場合,XYとなります。

    (例)

    [図データ]

    上記の場合,「バイナリデータX<バイナリデータY」となります。

論理データの比較
  • 比較するデータに不定が含まれる場合,不定はナル値と見なされます。ナル値の比較については,「6.7 ナル値」を参照してください。

  • 比較するデータの論理値が同じ場合,データが等しいと見なされます。

  • 比較するデータの論理値が異なる場合,真は偽より大きいと見なされます。

UUIDデータの比較
  • 比較するデータの全バイト値が一致する場合,データが等しいと見なされます。

  • 各データの先頭バイトから順に比較します。異なるバイト値が出現した場合,そのバイト値の大小によって比較するデータの大小が決定されます。

(2) 格納代入できるデータ型

INSERTの挿入値またはUPDATEの更新値として,指定できるデータ型の組み合わせを次の表に示します。ただし,?パラメタを使用して格納代入を行う場合には,代入先と代入元のデータ型をそろえてください。?パラメタについては,「6.6 変数(?パラメタ)」を参照してください。

表6‒9  格納代入できるデータ型の組み合わせ

代入元のデータ型

代入先のデータ型

数データ

文字データ

日時データ

バイナリデータ

論理データ

UUIDデータ

行データ

DATE

TIME

TIMESTAMP

時刻帯なし

時刻帯付き

数データ

×

×

×

×

×

×

×

×

×

文字データ

×

×

×

×

日時データ

DATE

×

×

×

×

×

×

×

×

TIME

×

×

×

TIMESTAMP(時刻帯なし)

×

×

TIMESTAMP(時刻帯付き)

×

×

×

バイナリデータ

×

×

×

×

×

×

×

×

×

論理データ

×

×

×

×

×

×

×

×

×

UUIDデータ

×

×

×

×

×

×

×

×

×

(凡例)

○:格納代入できます。

×:格納代入できません。

注※

CHAR型から行データ(ROW)への代入ができます。

文字データの格納代入
  • 代入元のデータ長が代入先のデータ長よりも長い場合,代入できません。

  • 代入先がCHAR型で代入元のデータ長が代入先のデータ長より短い場合は,最後に半角空白を補って格納します。

数データの格納代入
  • 代入元が代入先で扱える値の範囲を超える場合,代入できません。

  • 代入先がINTEGER型,BIGINT型,またはSMALLINT型で,代入元がDECIMAL型,NUMERIC型,DOUBLE PRECISION型,FLOAT型,またはREAL型の場合,端数(小数)部分は切り捨てられます。

  • 代入元,代入先ともにDECIMAL型またはNUMERIC型の場合,代入先の位取りより下位の桁部分は切り捨てられます。代入先の位取りより代入元の位取りが小さい場合,小数部分に0を補って格納します。

  • 代入元がDOUBLE PRECISION型,FLOAT型,またはREAL型で,代入先がDECIMAL型またはNUMERIC型の場合,代入先の位取りより下位の桁部分は,丸められます(最近接偶数への丸め)。代入先の位取りより小さい場合は,小数部分に0を補って格納します。

日時データへの文字データの格納代入

文字データが既定の入力表現で記述された定数の場合に限り,文字データから日時データへの格納代入ができます。既定の入力表現については,「6.3.3 既定の文字列表現」を参照してください。

ただし,INSERT文の挿入列が日時データの場合,問合せ指定の選択式に既定の入力表現で記述した定数を指定しても格納代入は行えません。

  • 日付データに対して,日付を表す既定の入力表現で記述した文字列を格納代入できます。日付を表す既定の入力表現の文字データを日付データに変換し,日付データとして格納代入します。

  • 日付データに対して,時刻帯なしの時刻印を表す既定の入力表現で記述した文字列を格納代入できます。このとき,時刻帯なしの時刻印を表す既定の入力表現の文字データを,時刻帯なしの時刻印データに変換します。その後,時刻帯なしの時刻印データの日付部分だけを格納代入します。

  • 時刻データに対して,時刻を表す既定の入力表現で記述した文字列を格納代入できます。時刻を表す既定の文字列表現の文字データを時刻データに変換し,時刻データとして格納代入します。

  • 時刻帯なしの時刻印データに対して,時刻帯なしの時刻印を表す既定の入力表現で記述した文字列を格納代入できます。時刻帯なしの時刻印を表す既定の入力表現の文字データを,時刻帯なしの時刻印データに変換します。その後,時刻帯なしの時刻印データとして格納代入します。

  • 時刻帯付きの時刻印データに対して,時刻帯付きの時刻印を表す既定の入力表現で記述した文字列を格納代入できます。時刻帯付きの時刻印を表す既定の入力表現の文字データを,時刻帯付きの時刻印データに変換します。その後,時刻帯付きの時刻印データとして格納代入します。

  • 時刻帯なしの時刻印データに対して,日付を表す既定の入力表現で記述した文字列を格納代入できます。このとき,日付を表す既定の文字列表現に時刻0時0分0秒を補って時刻帯なしの時刻印データに変換します。その後,時刻帯なしの時刻印データとして格納代入します。

日時データの格納代入
  • 日付データを時刻帯なしの時刻印データに格納代入する場合,日付データに時刻0時0分0秒を補います。その後,時刻帯なしの時刻印データに変換して格納代入します。

  • 時刻帯なしの時刻印データを日付データに格納代入する場合,時刻帯なしの時刻印データの日付部分だけを格納代入します。

  • 「代入元の小数秒の桁数>代入先の小数秒の桁数」の場合,代入できない部分は切り捨てます。

  • 「代入元の小数秒の桁数<代入先の小数秒の桁数」の場合,足りない部分に0を補って格納代入します。

バイナリデータの格納代入
  • 代入元のデータ長が代入先のデータ長よりも長い場合,代入できません。

  • 代入先がBINARY型で,代入元のデータ長が代入先のデータ長よりも短い場合,末尾にX'00'を補って格納します。

論理データの格納代入

代入元のデータがそのまま代入先のデータに格納されます。

UUIDデータの格納代入

代入元のデータがそのまま代入先のデータに格納されます。

行データの格納代入

代入先の行データが仮定するデータ長(挿入対象表または更新対象表の行長)と,代入元のデータ長を一致させてください。

(3) 検索代入できるデータ型

検索結果を受け取る場合,代入先と代入元のデータ型をそろえてください。

選択式にROW(行データ)を指定している場合,検索結果を受け取る代入先のデータ型にCHAR型の変数を指定できます。

(4) 表関数導出表の列への格納代入(ADB_CSVREAD関数の場合)

ここでは,CSVファイル中のフィールドデータを表関数導出表の列に格納代入する際の規則について説明します。また,フィールドデータの記述形式の規則についても説明します。

なお,ここでいう表関数導出表は,ADB_CSVREAD関数によって導出される表関数導出表を意味しています。

メモ

表関数導出表とは,ADB_AUDITREAD関数またはADB_CSVREAD関数によって導出された表形式のデータ集合のことです。ADB_AUDITREAD関数については,「7.15.2 ADB_AUDITREAD関数」を参照してください。ADB_CSVREAD関数については,「7.15.3 ADB_CSVREAD関数」を参照してください。

表関数導出表の列のデータ型とフィールドデータの記述形式に互換性がある必要があります。表関数導出表の列のデータ型とフィールドデータの記述形式の関係を次の表に示します。

表6‒10 表関数導出表の列のデータ型とフィールドデータの記述形式の関係

項番

表関数導出表の列のデータ型

フィールドデータの記述形式

形式

記述例

注意事項

ナル値が格納代入される記述例

1

数データ

BIGINT

〔{+|-}〕a...a

+-:符号

a...a:数値(a09

  • 100

  • -123

  • 000

  • 0657

  • 符号と数値を合わせて20文字まで記述できます。

  • 形式および文字数の制限に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

  • ,*,

  • ,"*",

  • ,,

  • ,"",

  • ,"""",

ただし,囲み文字指定オプションにNONEを指定した場合,囲み文字を使用した例は指定できません。

2

INTEGER※9

  • 100

  • -0123

  • 0

  • +0657

  • 符号と数値を合わせて11文字まで記述できます。

  • 形式および文字数の制限に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番1と同じ。

3

SMALLINT※10

  • 符号と数値を合わせて6文字まで記述できます。

  • 形式および文字数の制限に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番1と同じ。

4

DECIMAL

〔{+|-}〕

a...a〔.〔b...b〕〕|.b...b

+-:符号

a...a:整数部(a09

b...b:小数部(b09※2

  • 100

  • -123.00

  • .00

  • 012.

  • -1.56

  • +.560

  • 整数部と小数部を合わせて38文字(格納先の列の精度と位取りが一致している場合は,整数部(0)を省略しないときだけ39文字)まで記述できます。

  • 形式および文字数の制限に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番1と同じ。

5

NUMERIC

6

DOUBLE PRECISION

〔{+|-}〕

a...a〔.〔b...b〕〕|.b...b}〔{E|e}〔〔{+|-}〕c...c〕〕

+-:符号

a...a:仮数の整数部(a09

b...b:仮数の小数部(b09

c...c:指数部(c09※3

E,e:浮動小数点数定数

  • 100

  • -123

  • 0.

  • -1.5600

  • .56

  • -02.4e+9

  • 000e

  • 2.4E+009

  • 509文字まで記述できます。※4

  • 形式および文字数の制限に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番1と同じ。

7

FLOAT

8

REAL

9

文字データ

CHARACTER

a...a

a...a:1文字以上のデータ

  • abcdef△△

  • ABCDEF

  • 格納先の列の定義長までの文字数が記述できます。

  • データの先頭を除き,末尾まで連続する半角空白は省略できます。※5

  • ,,

  • ,"",

半角空白およびタブは挿入できません。

囲み文字指定オプションにNONEを指定した場合,囲み文字を使用した例は指定できません。

10

VARCHAR

a...a

a...a:1文字以上のデータ

  • abcdef△△

  • ABCDEF

  • △△

  • 格納先の列の定義長までの文字数が記述できます。

  • ,,

囲み文字は指定できません。また,半角空白およびタブは挿入できません。

■長さ0のデータを指定する場合

  • ,"",

ただし,囲み文字指定オプションにNONEを指定した場合,長さ0のデータは指定できません。

11

日時データ

DATE

YYYY-MM-DD

YYYY/MM/DD

YYYY:年(00019999

MM:月(0112

DD:日(01〜その月の最終日)

  • 2013-06-10

  • 2013/06/10

  • 形式に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番1と同じ。

12

TIME

hh:mm:ss〔.〔nn...n〕〕

hh時(0023

mm分(0059

ss:秒(0059

nn...n:小数秒(n09

  • 11:03:58

  • 11:03:58.

  • 11:03:58.1234

  • 小数秒(nn...n)は12文字まで記述できます。※6

  • 形式および文字数の制限に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番1と同じ。

13

TIMESTAMP WITHOUT TIME ZONE

YYYY-MM-DD

YYYY/MM/DD

hh:mm:ss〔.〔nn...n〕〕

YYYY:年(00019999

MM:月(0112

DD:日(01〜その月の最終日)

hh:時(0023

mm:分(0059

ss:秒(0059

nn...n:小数秒(n09

  • 2013-06-1011:03:58

  • 2013-06-1011:03:58.1234

  • 小数秒(nn...n)は12文字まで記述できます。※6

  • 形式および文字数の制限に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番1と同じ。

14

TIMESTAMP WITH TIME ZONE

YYYY-MM-DD

YYYY/MM/DD

hh:mm:ss〔.〔nn...n〕〕〔{{+|-}hh:mm|Z|z}〕

YYYY:年(00019999

MM:月(0112

DD:日(01〜その月の最終日)

hh:時(0023

mm:分(0059

ss:秒(0059

nn...n:小数秒(n09

Zまたはz:UTCを表す記号

  • 2025-06-1011:03:58+09:00

  • 2025-06-1011:03:58.1234-04:00

  • 2025-12-3012:34:56Z

項番1と同じ。

15

バイナリデータ

BINARY

16進文字列の場合

a...a

a09AF,またはaf

  • 12340000

  • 90AB

  • 90abCDEF

  • 格納先の列の定義長×2までの2の倍数の文字数を記述できます。※7

  • データの先頭を除き,末尾まで連続する「00」は省略できます。※8

  • 形式および文字数の制限に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番1と同じ。

16

2進文字列の場合

a...a

a0または1

  • 01010101

  • 01010101

  • 格納先の列の定義長×8までの8の倍数の文字数を記述できます。※7

  • データの先頭を除き,末尾まで連続する「00000000」は省略できます。※8

  • 形式および文字数の制限に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番1と同じ。

17

VARBINARY

16進文字列の場合

a...a

a09AF,またはaf

  • 12340000

  • 90AB

  • 90abCDEF

  • 格納先の列の定義長×2までの2の倍数の文字数を記述できます。※7

  • 形式および文字数の制限に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

  • ,*,

  • ,"*",

  • ,,

ただし,囲み文字指定オプションにNONEを指定した場合,囲み文字を使用した例は指定できません。

■長さ0のデータを指定する場合

  • ,"",

  • ,"""",

ただし,囲み文字指定オプションにNONEを指定した場合,長さ0のデータは指定できません。

18

2進文字列の場合

a...a

a0または1

  • 01010101

  • 01010101

  • 格納先の列の定義長×8までの8の倍数の文字数を記述できます。※7

  • 形式および文字数の制限に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番16と同じ。

19

論理データ

BOOLEAN

TRUE|FALSE

TRUE:真

FALSE:偽

大文字と小文字が混在していても問題ありません。

  • TRUE

  • FALSE

  • True

  • False

  • true

  • false

  • 形式に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番1と同じ。

20

UUIDデータ

UUID

aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa

a09AF,またはaf

  • 12345678-1234-1234-1234-123456789AbC

  • 12345678-1234-1234-1234-123456789ABC

  • 形式に関係なく,すべての文字の前後に1個以上の半角空白またはタブを挿入できます。※1

項番1と同じ。

(凡例)

△:1個以上の半角空白,またはタブ

, :区切り文字

" :囲み文字

注※1

文字の前後に1個以上の半角空白(0x20)やタブ(0x09)がある場合,その半角空白およびタブは削除されます。

(例)△123△△4△△△ → 1234

なお,データがすべて削除された場合は,ナル値として扱われます。

注※2

格納先の位取りより下位の桁部分は切り捨てられます。

注※3

指数を省略した場合,指数として+0を仮定します。

注※4

指定する値によっては,桁落ちが生じる場合があります。

注※5

入力データが定義長に満たない場合は,半角空白が残りの部分に格納されます。

注※6

小数秒(nn...n)の桁数が表のデータ型の小数秒精度に満たない場合は,右側に0が補われます。

小数秒(nn...n)の桁数が表のデータ型の小数秒精度を超える場合は,入力データは切り捨てられます。

注※7

16進文字列の文字数が2の倍数でない場合,エラーとなります。

2進文字列の文字数が8の倍数でない場合,エラーとなります。

注※8

入力データが定義長に満たない場合は,0x00が残りの部分に格納されます。

注※9

整数データ型のデータ形式がレガシー形式の場合,フィールドデータの記述形式は項番1のBIGINTと同じになります。

注※10

整数データ型のデータ形式がレガシー形式の場合,フィールドデータの記述形式は項番2のINTEGERと同じになります。