ページの先頭行へ戻る
Symfoware Server V10.0.0 SQLリファレンス

2.5.2 数値関数

機能

数値関数は、数値型の値となる関数です。

関数

機能

POSITION式

POSITION式は、POSITIONを指定して、1番目の文字値式の文字列を持つ2番目の文字値式中の文字の開始位置を求めます。

EXTRACT式

EXTRACT式は、抜き出し元の日時値式および時間隔値式から、抜き出しフィールドで指定された日時フィールドに相当する部分を抽出します。

LENGTH式

LENGTH式は、データ列値式の文字数またはバイト数を求めます。

ABS式

ABS式は、指定した数値式の絶対値を求めます。

CEIL式

CEIL式は、指定した数値式以上の最小整数値を求めます。

FLOOR式

FLOOR式は、指定した数値式以下の最大整数値を求めます。

ROUND式

ROUND式は、数値式を丸め位置で四捨五入します。

TRUNC式

TRUNC式は、数値式を切捨て位置で切り捨てます。

SPAN_DATE関数

2つの日付間の時間隔を、指定した時間隔の単位で返却します。

記述形式

構文要素の構成

参照項番

一般規則

POSITION
  • POSITION式は、文字値式1の文字列を持つ文字値式2中の文字の開始位置を求めます。

  • 文字値式2が文字値式1の文字列を含まないならば、結果は0になります。

  • 文字値式1の文字列長が0ならば、POSITION式の結果は1となります。

  • POSITION式の文字値式1または文字値式2に動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。SQL記述子域のTYPEにVARCHARやNCHAR VARYINGの情報が設定されます。SQL記述子域のLENGTHにVARCHARやNCHAR VARYINGの最大文字数が設定されます。

    表2.18 動的パラメタ指定が指定された場合のDESCRIBE情報

    文字値式1または文字値式2のデータ型

    DESCRIBE情報

    CHAR(n)

    VARCHAR(Nvc)

    VARCHAR(n)

    VARCHAR(Nvc)

    NCHAR(n)

    NCHAR VARYING(Nvn)

    NCHAR VARYING(n)

    NCHAR VARYING(Nvn)

    Nvc:VARCHARのデータの最大長
    Nvn:NCHAR VARYINGのデータの最大長

  • 文字値式1と文字値式2の両方が動的パラメタ指定の場合はエラーになります。

  • 文字値式1または文字値式2がNULLならば、結果もNULLになります。POSITION式の結果のデータ型を以下に示します。

    表2.19 POSITION式の結果のデータ型

    文字値式1または文字値式2のデータ型

    結果のデータ型

    CHAR(n)

    SMALLINT

    VARCHAR(n)

    SMALLINT

    NCHAR(n)

    SMALLINT

    NCHAR VARYING(n)

    SMALLINT

    その他

    エラー


POSITION式

POSITION('F' IN 'OFFICE')  →結果は2になります。
POSITION('F' IN 'OFFICE', 3 )  →結果は3になります。
POSITION('C' IN 'JAVA')    →結果は0になります。
POSITION('' IN 'ABC')      →結果は1になります。
EXTRACT
  • EXTRACT式は、抜き出し元の日時値式および時間隔値式から、抜き出しフィールドで指定された日時フィールドに相当する部分を抽出します。

  • EXTRACT式の結果のデータ型は、INTEGER型になります。

  • 抜き出し元がNULLならば、EXTRACT式の結果はNULLになります。

  • 抜き出し元が時間隔型で負の値ならば、EXTRACT式の結果は負数になります。

  • EXTRACT式に動的パラメタ指定が指定された場合は、エラーになります。

EXTRACT式

EXTRACT(YEAR FROM DATE'2007-08-23') →結果は2007になります。
LENGTH
  • CHARACTER LENGTH式は、データ列値式の文字数を求めます。ただし、データ列値式に列指定を指定した場合、CHARACTER LENGTH式の結果は列の定義長に等しくなります。

  • OCTET LENGTH式は、データ列値式のバイト数を求めます。

  • CHARACTER_LENGTHとCHAR_LENGTHは同じ意味です。

  • LENGTH式に動的パラメタ指定が指定された場合は、エラーになります。

  • データ列値式がNULLならば、結果もNULLになります。LENGTH式の結果のデータ型を以下に示します。

    表2.20 LENGTH式の結果のデータ型

    文字値式のデータ型

    結果のデータ型

    CHAR(n)

    SMALLINT

    VARCHAR(n)

    SMALLINT

    NCHAR(n)

    SMALLINT

    NCHAR VARYING(n)

    SMALLINT

    その他

    エラー

LENGTH式

CHAR_LENGTH('ABあいう') →結果は5になります。
OCTET_LENGTH('ABあいう') →結果は8になります。

ABS
  • ABS式は、指定した数値式の絶対値を求めます。

  • 数値式がNULLの場合は、ABS式の結果はNULLとなります。

  • ABS式の結果のデータ型は、数値式のデータ型と同じです。

  • 数値式のデータ型がSMALLINTまたはINTEGERで、負の最大値を指定した場合、結果となる正の値はSMALLINTまたはINTEGERで表現することができません。このような指定をした場合は、エラーとなりますので注意が必要です。以下の場合がエラーとなります。

    数値式のデータ型

    指定した値

    SMALLINT

    -32768

    INTEGER

    -2147483648

  • 数値式に動的パラメタ指定が指定された場合のDESCRIBE情報は、INTEGER型になります。

ABS式

ABS(123) →結果は123になります。
ABS(123.45) →結果は123.45になります。
ABS(-123.45) →結果は123.45になります。
ABS(-123.45E6) →結果は123.45E6になります。
CEIL
  • CEIL式は、指定した数値式以上の最小整数値を求めます。

  • 数値式がNULLの場合は、CEIL式の結果はNULLとなります。

  • 数値式の値が負数の場合、0に近い側の整数値が結果となります。

  • CEIL式に動的パラメタ指定が指定された場合はエラーになります。

  • CEIL式の結果のデータ型は次のようになります。

    数値式のデータ型

    CEIL式の結果のデータ型

    SMALLINT

    SMALLINT

    INTEGER

    INTEGER

    DECIMAL(p,q)

    DECIMAL(p1,q) p1=MIN(18,p+1)

    NUMERIC(p,q)

    NUMERIC(p1,q) p1=MIN(18,p+1)

    FLOAT(p)

    FLOAT(p)

    REAL

    REAL

    DOUBLE PRECISION

    DOUBLE PRECISION

CEIL式

CEIL(123) →結果は123になります。
CEIL(123.45) →結果は124.00になります。
CEIL(-123.45) →結果は-123.00になります。
CEIL(-1.2345E2) →結果は-1.2300E2になります。
CEIL(0.5) →結果は1.0になります。
CEIL(-0.5) →結果は0になります。
FLOOR
  • FLOOR式は、指定した数値式以下の最大整数値を求めます。

  • 数値式がNULLの場合は、FLOOR式の結果はNULLとなります。

  • 数値式の値が負数の場合、0より遠い側の整数値が結果となります。

  • FLOOR式に動的パラメタ指定が指定された場合はエラーになります。

  • FLOOR式の結果のデータ型は次のようになります。

    数値式のデータ型

    FLOOR式の結果のデータ型

    SMALLINT

    SMALLINT

    INTEGER

    INTEGER

    DECIMAL(p,q)

    DECIMAL(p1,q) p1=MIN(18,p+1)

    NUMERIC(p,q)

    NUMERIC(p1,q) p1=MIN(18,p+1)

    FLOAT(p)

    FLOAT(p)

    REAL

    REAL

    DOUBLE PRECISION

    DOUBLE PRECISION

FLOOR式

FLOOR(123) →結果は123になります。
FLOOR(123.45) →結果は123.00になります。
FLOOR(-123.45) →結果は-124.00になります。
FLOOR(-1.2345E2) →結果は-1.2400E2になります。
FLOOR(0.5) →結果は0.0になります。
FLOOR(-0.5) →結果は-1.0になります。
ROUND
  • ROUND式は、数値式を丸め位置で四捨五入します。

  • 丸め位置は数値式です。丸め位置には、小数点位置を起点とした有効桁(丸め位置)を指定します。また、-18から+18の範囲の整数値に変換できる値を指定します。丸め位置は、INTEGER型に変換されます。

  • 丸め位置を省略した場合は、0を指定したと見なします。

  • 数値式または丸め位置がNULLの場合、ROUND式の結果はNULLとなります。

  • 数値式のデータ型がSMALLINTまたはINTEGERの場合、四捨五入した結果がSMALLINTまたはINTEGERで表現できない値になった場合はエラーとなります。

  • 数値式の値が負の数の場合は、数値式の値を絶対値にしてROUND式で求めた値の符号を反転させた結果と同一です。

    ROUND(-n) = -ROUND(n) (nは任意の正の数)
  • ROUND式の結果のデータ型は次のようになります。

    数値式のデータ型

    ROUND式の結果のデータ型

    SMALLINT

    SMALLINT

    INTEGER

    INTEGER

    DECIMAL(p,q)

    DECIMAL(p1,q1) p1=MIN(18,p+1) q1=q

    NUMERIC(p,q)

    NUMERIC(p1,q1) p1=MIN(18,p+1) q1=q

    FLOAT(p)

    FLOAT(p)

    REAL

    REAL

    DOUBLE PRECISION

    DOUBLE PRECISION

  • ROUND式の各オペランドに動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。

    表2.21 動的パラメタ指定が指定された場合のDESCRIBE情報

    オペランド

    DESCRIBE情報

    数値式

    INTEGER

    丸め位置

    INTEGER

ROUND式

ROUND(3456.3456) →結果は3456.0000になります。
ROUND(3456.3456,2) →結果は3456.3500になります。
ROUND(3456.3546,-3) →結果は3000.0000になります。
ROUND(3.456E-1,2) →結果は3.500E-1になります。
ROUND(0.5) →結果は1.0になります。
ROUND(-0.5) →結果は-1.0になります。
ROUND(0.4) →結果は0.0になります。
ROUND(-0.4) →結果は0.0になります。
TRUNC
  • TRUNC式は、数値式を切捨て位置で切り捨てます。

  • 切捨て位置は数値式です。切捨て位置は、小数点位置を起点とした有効桁を指定します。また、-18から+18の範囲の整数値に変換できる値を指定します。切捨て位置は、INTEGER型に変換されます。

  • 引数に数値式以外を指定すると、エラーとなります。

  • 切捨て位置を省略した場合は、0を指定したと見なします。

  • 数値式または切捨て位置がNULLの場合、TRUNC式の結果はNULLとなります。

  • 数値式の値が負数の場合は、数値式の値を絶対値にしてTRUNC式で求めた値の符号を反転させた結果と同一です。

    TRUNC(-n) = -TRUNC(n) (nは任意の正の数)
  • TRUNC式の結果のデータ型は数値式のデータ型と同一になります。

  • TRUNC式の各オペランドに動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。

    表2.22 動的パラメタ指定が指定された場合のDESCRIBE情報

    オペランド

    DESCRIBE情報

    数値式

    INTEGER

    切捨て位置

    INTEGER

TRUNC式

TRUNC(3456.3456) →結果は3456.0000になります。
TRUNC(3456.3456,2) →結果は3456.3400になります。
TRUNC(3456.3546,-3) →結果は3000.0000になります。
TRUNC(3.456E-1,2) →結果は3.400E-1になります。
TRUNC(0.4) →結果は0.0になります。
TRUNC(-0.4) →結果は0.0になります。
TRUNC(0.5) →結果は0.0になります。
TRUNC(-0.5) →結果は0.0になります。
SPAN_DATE関数
  • SPAN_DATE関数は、2つの日付間の時間隔を、指定した時間隔の単位で返却します。

  • SPAN_DATE関数は、日付2-日付1の結果を返却します。日付1が日付2よりも新しい場合は、実行結果は負数となります。

  • 日付1、日付2は日時値式です。データ型はDATE型に代入可能でなければなりません。

  • 日付1または日付2がNULL値である場合、SPAN_DATE関数の結果はNULLとなります。

  • SPAN_DATE関数の結果のデータ型はINTEGER型です。

  • 時間隔の単位は、文字列型の値指定です。日付間の時間隔を求める単位を指定します。時間隔の単位に指定できる値とSPAN_DATE関数の結果は、以下のようになります。

    時間隔の単位

    SPAN_DATE関数の結果

    YEAR

    日付間の年の変わる回数を返却します。

    MONTH

    日付間の月の変わる回数を返却します。

    DAY

    日付間の日の変わる回数を返却します。

  • SPAN_DATE関数の各オペランドに動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。

    表2.23 動的パラメタ指定が指定された場合のDESCRIBE情報

    オペランド

    DESCRIBE情報

    日付1

    DATE

    日付2

    DATE

    時間隔の単位

    CHAR(5)

SPAN_DATE関数

SPAN_DATE(DATE'2006-08-01',DATE'2007-09-20','YEAR')→1になります。
SPAN_DATE(CURRENT_DATE,DATE'2007-11-10','MONTH')→3になります。
       現在の日付を2007-08-22とします。
SPAN_DATE(DATE'2007-09-10',DATE'2007-08-22','DAY')→-19になります。

使用例

1

POSITION式(N1が'アダム電気'の場合。なお、N1のデータ型は各国語文字列型とします。)

SELECT POSITION(N'電気' IN N1) INTO :POS1 FROM S1.T1
→結果は4になります。

2

POSITION式(C1が'ADAM電気(株)'の場合。なお、C1のデータ型は文字列型とします。ADAMは、1バイトの英数字です。)

SELECT POSITION('(株)' IN C1) INTO :POS1 FROM S1.T1
→結果は7になります。

3

EXTRACT式(C1がDATE型で、'2007-04-17'の場合)

SELECT EXTRACT(DAY FROM C1) INTO :DAY1 FROM S1.T1
→結果は17になります。

4

LENGTH式(N1が'アダム電気'の場合。なお、N1のデータ型は各国語文字列型とします。)

SELECT CHAR_LENGTH(N1) INTO :LEN1 FROM S1.T1
→結果は5になります。

5

LENGTH式(C1が'ADAM電気(株)'の場合。なお、C1のデータ型は文字列型とします。ADAMは1バイトの英数字です。)

SELECT CHAR_LENGTH(C1) INTO :LEN1 FROM S1.T1
→結果は9になります。

6

ABS式(最低気温が-38.45の場合の絶対値を求めます。)

SELECT 地区コード , ABS(最低気温) FROM 気象情報管理表
→結果は38.45 になります。

7

CEIL式(最高気温が27.255で最低気温が-21.235をその値以上の最小整数値にします。)

SELECT 地区名, CEIL(最高気温), CEIL(最低気温) FROM 気象情報管理表
→結果は、最高気温が28.000で最低気温が-21.000になります。

8

FLOOR式(最高気温が27.255で、最低気温が-21.235をその値以下の最大整数値にします。)

SELECT 地区名, FLOOR(最高気温), FLOOR(最低気温) FROM 気象情報管理表
→結果は、最高気温が27.000で最低気温が-22.000になります。

9

ROUND式(最高気温が27.255を小数第2位で四捨五入します。)

SELECT 地区名, ROUND(最高気温, 1) FROM 気象情報管理表
→結果は、最高気温が27.300になります。

10

TRUNC式(最高気温が27.255を小数第2位で切捨てます。)

SELECT 地区名, TRUNC(最高気温, 1) FROM 気象情報管理表
→結果は、最高気温が27.200になります。

11

SPAN_DATE関数(発注日“2007-04-01”から現在の日付“2007-04-10”までの経過日数を求めます。)

SELECT 発注番号,SPAN_DATE(CURRENT_DATE,発注日,'DAY') AS 経過日数
    FROM 発注表
    WHERE 納品日 IS NULL
    ORDER BY 経過日数
→結果は、経過日数が9になります。