Hitachi

Hitachi Advanced Data Binder SQLリファレンス


8.4.4 MOD

被除数を除数で割った余りを返します。

〈この項の構成〉

(1) 指定形式

スカラ関数MOD::=MOD(被除数,除数)
 
  被除数::=値式
  除数::=値式

(2) 指定形式の説明

被除数

被除数を指定します。

指定規則を次に示します。

  • 被除数は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。

  • 被除数には,数データを指定してください。数データについては,「6.2.1 データ型の種類」の「(1) 数データ」を参照してください。

  • 被除数には,?パラメタを単独で指定できません。

除数

除数を指定します。

指定規則を次に示します。

  • 除数は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。

  • 除数には,数データを指定してください。数データについては,「6.2.1 データ型の種類」の「(1) 数データ」を参照してください。

  • 除数には0を指定できません。0を指定した場合,0除算エラーになります。

  • 除数には,?パラメタを単独で指定できません。

(3) 規則

  1. 実行結果のデータ型は,被除数および除数のデータ型によって,次の表のように決まります。

    表8‒4 スカラ関数MODの実行結果のデータ型

    被除数のデータ型

    除数のデータ型

    実行結果のデータ型

    INTEGER

    または

    BIGINT

    INTEGERBIGINT

    INTEGER

    SMALLINT

    SMALLINT

    DECIMALNUMERIC

    DECIMAL

    DOUBLE PRECISIONFLOAT

    DOUBLE PRECISION

    SMALLINT

    INTEGERBIGINT

    INTEGER

    SMALLINT

    SMALLINT

    DECIMALNUMERIC

    DECIMAL

    DOUBLE PRECISIONFLOAT

    DOUBLE PRECISION

    DECIMAL(p,0)

    または

    NUMERIC(p,0)

    INTEGERBIGINT

    INTEGER

    SMALLINT

    SMALLINT

    DECIMALNUMERIC

    DECIMAL

    DOUBLE PRECISIONFLOAT

    DOUBLE PRECISION

    DECIMAL(p,s)

    または

    NUMERIC(p,s)

    s≧1の場合

    INTEGERBIGINT

    DECIMAL

    SMALLINT

    DECIMALNUMERIC

    DOUBLE PRECISIONFLOAT

    DOUBLE PRECISION

    DOUBLE PRECISION

    または

    FLOAT

    INTEGERBIGINT

    DOUBLE PRECISION

    SMALLINT

    DECIMALNUMERIC

    DOUBLE PRECISIONFLOAT

    実行結果のデータ型がDECIMAL型の場合,精度と位取りは次のように決まります。

    精度(p)=MIN(pysys ,38)

    位取り(s)=MAX(sx sy

    MOD(x,y)と指定した場合,xのデータ型をDECIMAL(px,sx)yのデータ型をDECIMAL(py,sy)として計算してください。

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

  2. 実行結果の値は,非ナル値制約なし(ナル値を許す)となります。

  3. 被除数または除数がナル値の場合,実行結果はナル値になります。

  4. 実行結果の値の符号は,被除数の値の符号と同じになります。

  5. DOUBLE PRECISIONまたはFLOATのデータは誤差を含むため,スカラ関数MODDOUBLE PRECISIONまたはFLOATのデータを指定する場合は注意してください。例えば,次の実行結果は0になりません。

    MOD(5.0E-1,1.0E-1) → 9.9999999999999978E-2

    これは,0.1が2進法では有限桁で表現できないことに起因しています(0.11.0E-1は正確には等しくありません)。剰余の結果として正確な値を必要とする場合は,DECIMALまたはNUMERICを使用してください。

(4) 例題

例題1

T1C1列の値を3で割った余りを求めます。

SELECT MOD("C1",3) FROM "T1"

[図データ]

例題2

T1C1列の値をC2列の値で割った余りを求めます。

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

[図データ]