Hitachi

Hitachi Advanced Data Binder SQLリファレンス


7.21.2 値式の結果のデータ型

次の個所に指定した値式のデータ型によって結果のデータ型が決まります。

(例1)CASE式の場合

[図データ]

値式1〜値式3のデータ型によって,CASE式の結果のデータ型が決まります。

(例2)スカラ関数GREATESTの場合

[図データ]

値式1〜値式3のデータ型によって,スカラ関数GREATESTの結果のデータ型が決まります。

ここでは,結果のデータ型の決定規則について説明します。

〈この項の構成〉

(1) 値式のデータ型が文字データの場合

(2) 値式のデータ型が数データの場合

値式のデータ型が数データの場合,結果のデータ型は次の表に示すとおりに決まります。

表7‒16 値式のデータ型と結果のデータ型の関係(値式のデータ型が数データの場合)

項番

値式Nのデータ型

値式N+1のデータ型

結果のデータ型

1

SMALLINT

SMALLINT

SMALLINT

2

INTEGER

BIGINT

INTEGER

3

DECIMAL

NUMERIC

DECIMAL

4

DOUBLE PRECISION

FLOAT

DOUBLE PRECISION

5

INTEGER

BIGINT

SMALLINT

INTEGER

6

INTEGER

BIGINT

7

DECIMAL

NUMERIC

DECIMAL

8

DOUBLE PRECISION

FLOAT

DOUBLE PRECISION

9

DECIMAL

NUMERIC

SMALLINT

DECIMAL

10

INTEGER

BIGINT

11

DECIMAL

NUMERIC

12

DOUBLE PRECISION

FLOAT

DOUBLE PRECISION

13

DOUBLE PRECISION

FLOAT

SMALLINT

DOUBLE PRECISION

14

INTEGER

BIGINT

15

DECIMAL

NUMERIC

16

DOUBLE PRECISION

FLOAT

(凡例)N:1以上の整数

■結果のデータ型がDECIMAL型の場合

精度と位取りは次のように決まります。値式1DECIMAL(p1,s1)値式2DECIMAL(p2,s2)値式NDECIMAL(pN,sN)とします。

  • 精度=MIN(38,PmaxSmax

  • 位取り=MIN(Smax,38−Pmax

Pmax=MAX(p1s1p2s2,…,pNsN

Smax=MAX(s1s2,…,sN

値式のデータ型がINTEGERまたはBIGINTの場合は,DECIMAL(20,0)として計算してください。値式のデータ型がSMALLINT型の場合は,DECIMAL(10,0)として計算してください。

なお,結果の数データが,ここで求めた精度,位取りに収まらない場合,小数部が切り捨てられます。例を次に示します。

例1

T1C1列,C2列のデータ型がそれぞれDECIMAL(37,0)DECIMAL(10,2)で,値がそれぞれナル値,12345678.12の場合,次のSELECT文を実行します。

SELECT COALESCE("C1","C2") FROM "T1"

<検索結果>

12345678.1

この場合,スカラ関数COALESCEの実行結果のデータ型がDECIMAL(38,1)になり,小数部の下位の桁が切り捨てられます。

例2

行値構成子要素に1.1234567890123456789および10を指定した表値構成子から導出された導出表DTを含む次のSELECT文を実行したとします。この場合,定数1.1234567890123456789DECIMAL(20,19),定数10INTEGERとして扱われます。また,INTEGERDECIMAL(20,0)として扱われるため,表値構成子から導出される列C1の結果のデータ型はDECIMAL(38,18)になります。その結果,小数部の下位の桁が切り捨てられます。

SELECT "C1" FROM (VALUES(1.1234567890123456789),(10)) "DT"("C1")

<検索結果>

1.123456789012345678
10.000000000000000000

また,次のように定数10を明示的に10進数定数の表記とし,DECIMAL型とすることで小数部の下位の桁が切り捨てられることを防ぐことができます。この場合,定数1.1234567890123456789DECIMAL(20,19),定数10.0DECIMAL(3,1)として扱われるため,表値構成子から導出される列C1の結果のデータ型がDECIMAL(21,19)になります。

SELECT "C1" FROM (VALUES(1.1234567890123456789),(10.0)) "DT"("C1")

<検索結果>

1.1234567890123456789
10.0000000000000000000

(3) 値式のデータ型が日時データの場合

値式のデータ型が日時データの場合,結果のデータ型は次の表に示すとおりに決まります。

表7‒17 値式のデータ型と結果のデータ型の関係(値式のデータ型が日時データの場合)

項番

値式Nのデータ型

値式N+1のデータ型

結果のデータ型

1

DATE

DATE

DATE

2

TIMESTAMP

TIMESTAMP

3

TIME

TIME

TIME

4

TIMESTAMP

DATE

TIMESTAMP

5

TIMESTAMP

TIMESTAMP

(凡例)N:1以上の整数

注※

DATE型のデータをTIMESTAMP型のデータに変換します。その際,時刻部分に00:00:00を補います。

■小数秒精度の指定がある場合

値式1値式Nの結果に小数秒精度が含まれる場合,結果の小数秒精度は次のように決まります。値式1の小数秒精度をp1値式2の小数秒精度をp2値式Nの小数秒精度をpNとします。

MAX(p1p2,…,pN

小数秒精度によって,結果のデータ長が決まります。

(4) 値式のデータ型がバイナリデータの場合

値式のデータ型がバイナリデータの場合,結果のデータ型は次のとおりに決まります。