機能
数値関数は、数値型の値となる関数です。
関数 | 機能 |
---|---|
POSITION式は、POSITIONを指定して、1番目の文字値式の文字列を持つ2番目の文字値式中の文字の開始位置を求めます。 | |
EXTRACT式は、抜き出し元の日時値式および時間隔値式から、抜き出しフィールドで指定された日時フィールドに相当する部分を抽出します。 | |
LENGTH式は、データ列値式の文字数またはバイト数を求めます。 | |
ABS式は、指定した数値式の絶対値を求めます。 | |
CEIL式は、指定した数値式以上の最小整数値を求めます。 | |
FLOOR式は、指定した数値式以下の最大整数値を求めます。 | |
ROUND式は、数値式を丸め位置で四捨五入します。 | |
TRUNC式は、数値式を切捨て位置で切り捨てます。 | |
2つの日付間の時間隔を、指定した時間隔の単位で返却します。 |
記述形式
参照項番
文字値式 → “2.10.2 データ列値式”
日時値式 → “2.10.3 日時値式”
時間隔値式 → “2.10.4 時間隔値式”
数値式 → “2.10.1 数値式”
一般規則
文字値式2が文字値式1の文字列を含まないならば、結果は0になります。
文字値式1の文字列長が0ならば、POSITION式の結果は1となります。
POSITION式の文字値式1または文字値式2に動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。SQL記述子域のTYPEにVARCHARやNCHAR VARYINGの情報が設定されます。SQL記述子域のLENGTHにVARCHARやNCHAR VARYINGの最大文字数が設定されます。
文字値式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式の結果のデータ型を以下に示します。
文字値式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式の結果のデータ型は、INTEGER型になります。
抜き出し元が時間隔型で負の値ならば、EXTRACT式の結果は負数になります。
EXTRACT式に動的パラメタ指定が指定された場合は、エラーになります。
EXTRACT式
EXTRACT(YEAR FROM DATE'2007-08-23') →結果は2007になります。
CHARACTER LENGTH式は、データ列値式の文字数を求めます。ただし、データ列値式に列指定を指定した場合、CHARACTER LENGTH式の結果は列の定義長に等しくなります。
LENGTH式に動的パラメタ指定が指定された場合は、エラーになります。
データ列値式がNULLならば、結果もNULLになります。LENGTH式の結果のデータ型を以下に示します。
文字値式のデータ型 | 結果のデータ型 |
---|---|
CHAR(n) | SMALLINT |
VARCHAR(n) | SMALLINT |
NCHAR(n) | SMALLINT |
NCHAR VARYING(n) | SMALLINT |
その他 | エラー |
LENGTH式
CHAR_LENGTH('ABあいう') →結果は5になります。 OCTET_LENGTH('ABあいう') →結果は8になります。
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式は、指定した数値式以上の最小整数値を求めます。
数値式が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式は、指定した数値式以下の最大整数値を求めます。
数値式が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になります。
丸め位置は数値式です。丸め位置には、小数点位置を起点とした有効桁(丸め位置)を指定します。また、-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情報を以下に示します。
オペランド | 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式は、数値式を切捨て位置で切り捨てます。
切捨て位置は数値式です。切捨て位置は、小数点位置を起点とした有効桁を指定します。また、-18から+18の範囲の整数値に変換できる値を指定します。切捨て位置は、INTEGER型に変換されます。
引数に数値式以外を指定すると、エラーとなります。
切捨て位置を省略した場合は、0を指定したと見なします。
数値式または切捨て位置がNULLの場合、TRUNC式の結果はNULLとなります。
数値式の値が負数の場合は、数値式の値を絶対値にしてTRUNC式で求めた値の符号を反転させた結果と同一です。
TRUNC(-n) = -TRUNC(n) (nは任意の正の数)
TRUNC式の結果のデータ型は数値式のデータ型と同一になります。
TRUNC式の各オペランドに動的パラメタ指定が指定された場合の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関数は、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情報を以下に示します。
オペランド | 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になります。
使用例
POSITION式(N1が'アダム電気'の場合。なお、N1のデータ型は各国語文字列型とします。)
SELECT POSITION(N'電気' IN N1) INTO :POS1 FROM S1.T1 →結果は4になります。
POSITION式(C1が'ADAM電気(株)'の場合。なお、C1のデータ型は文字列型とします。ADAMは、1バイトの英数字です。)
SELECT POSITION('(株)' IN C1) INTO :POS1 FROM S1.T1 →結果は7になります。
EXTRACT式(C1がDATE型で、'2007-04-17'の場合)
SELECT EXTRACT(DAY FROM C1) INTO :DAY1 FROM S1.T1 →結果は17になります。
LENGTH式(N1が'アダム電気'の場合。なお、N1のデータ型は各国語文字列型とします。)
SELECT CHAR_LENGTH(N1) INTO :LEN1 FROM S1.T1 →結果は5になります。
LENGTH式(C1が'ADAM電気(株)'の場合。なお、C1のデータ型は文字列型とします。ADAMは1バイトの英数字です。)
SELECT CHAR_LENGTH(C1) INTO :LEN1 FROM S1.T1 →結果は9になります。
ABS式(最低気温が-38.45の場合の絶対値を求めます。)
SELECT 地区コード , ABS(最低気温) FROM 気象情報管理表 →結果は38.45 になります。
CEIL式(最高気温が27.255で最低気温が-21.235をその値以上の最小整数値にします。)
SELECT 地区名, CEIL(最高気温), CEIL(最低気温) FROM 気象情報管理表 →結果は、最高気温が28.000で最低気温が-21.000になります。
FLOOR式(最高気温が27.255で、最低気温が-21.235をその値以下の最大整数値にします。)
SELECT 地区名, FLOOR(最高気温), FLOOR(最低気温) FROM 気象情報管理表 →結果は、最高気温が27.000で最低気温が-22.000になります。
ROUND式(最高気温が27.255を小数第2位で四捨五入します。)
SELECT 地区名, ROUND(最高気温, 1) FROM 気象情報管理表 →結果は、最高気温が27.300になります。
TRUNC式(最高気温が27.255を小数第2位で切捨てます。)
SELECT 地区名, TRUNC(最高気温, 1) FROM 気象情報管理表 →結果は、最高気温が27.200になります。
SPAN_DATE関数(発注日“2007-04-01”から現在の日付“2007-04-10”までの経過日数を求めます。)
SELECT 発注番号,SPAN_DATE(CURRENT_DATE,発注日,'DAY') AS 経過日数 FROM 発注表 WHERE 納品日 IS NULL ORDER BY 経過日数 →結果は、経過日数が9になります。