8.4.4 MOD
被除数を除数で割った余りを返します。
- 〈この項の構成〉
(1) 指定形式
スカラ関数MOD::=MOD(被除数,除数) 被除数::=値式 除数::=値式
(2) 指定形式の説明
- 被除数:
-
被除数を指定します。
指定規則を次に示します。
-
被除数は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
被除数には,数データを指定してください。数データについては,「6.2.1 データ型の種類」の「(1) 数データ」を参照してください。
-
被除数には,?パラメタを単独で指定できません。
-
- 除数:
-
除数を指定します。
指定規則を次に示します。
-
除数は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
除数には,数データを指定してください。数データについては,「6.2.1 データ型の種類」の「(1) 数データ」を参照してください。
-
除数には0を指定できません。0を指定した場合,0除算エラーになります。
-
除数には,?パラメタを単独で指定できません。
-
(3) 規則
-
実行結果のデータ型は,被除数および除数のデータ型によって,次の表のように決まります。
表8‒4 スカラ関数MODの実行結果のデータ型 被除数のデータ型
除数のデータ型
実行結果のデータ型
INTEGER
または
BIGINT
INTEGER,BIGINT
INTEGER
SMALLINT
SMALLINT
DECIMAL,NUMERIC
DECIMAL
DOUBLE PRECISION,FLOAT
DOUBLE PRECISION
SMALLINT
INTEGER,BIGINT
INTEGER
SMALLINT
SMALLINT
DECIMAL,NUMERIC
DECIMAL
DOUBLE PRECISION,FLOAT
DOUBLE PRECISION
DECIMAL(p,0)
または
NUMERIC(p,0)
INTEGER,BIGINT
INTEGER
SMALLINT
SMALLINT
DECIMAL,NUMERIC
DECIMAL
DOUBLE PRECISION,FLOAT
DOUBLE PRECISION
DECIMAL(p,s)
または
NUMERIC(p,s)
s≧1の場合
INTEGER,BIGINT
DECIMAL
SMALLINT
DECIMAL,NUMERIC
DOUBLE PRECISION,FLOAT
DOUBLE PRECISION
DOUBLE PRECISION
または
FLOAT
INTEGER,BIGINT
DOUBLE PRECISION
SMALLINT
DECIMAL,NUMERIC
DOUBLE PRECISION,FLOAT
- 注
-
実行結果のデータ型がDECIMAL型の場合,精度と位取りは次のように決まります。
精度(p)=MIN(py−sy+s ,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)として計算してください。
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
被除数または除数がナル値の場合,実行結果はナル値になります。
-
実行結果の値の符号は,被除数の値の符号と同じになります。
-
DOUBLE PRECISION型またはFLOAT型のデータは誤差を含むため,スカラ関数MODでDOUBLE PRECISION型またはFLOAT型のデータを指定する場合は注意してください。例えば,次の実行結果は0になりません。
MOD(5.0E-1,1.0E-1) → 9.9999999999999978E-2
これは,0.1が2進法では有限桁で表現できないことに起因しています(0.1と1.0E-1は正確には等しくありません)。剰余の結果として正確な値を必要とする場合は,DECIMAL型またはNUMERIC型を使用してください。
(4) 例題
- 例題1
-
表T1のC1列の値を3で割った余りを求めます。
SELECT MOD("C1",3) FROM "T1"
- 例題2
-
表T1のC1列の値をC2列の値で割った余りを求めます。
SELECT MOD("C1","C2") FROM "T1"