본문 바로가기

ABAP 프로그래밍 개념/OPEN SQL

Numeric Function

문법
... func( arg1[, arg2] ... ) ...

Numeric Function인 'func'를 SQL 표현식 또는 Open SQL에서 표현식의 피연산자로 호출합니다. 함수의 인수 'arg1', 'arg2', ...는 괄호 안에 쉼표로 구분된 목록으로 지정됩니다. 여는 괄호 뒤와 닫는 괄호 앞에 공백을 배치해야 합니다.

다음 표에는 SQL 표현식으로 지정할 수 있는 숫자 함수와 인수에 대한 요구 사항이 나와 있습니다. 함수의 의미는 숫자 값에 대한 SQL 함수에서 확인할 수 있습니다.

문법 유효한 인수 유형 결과 유형
ABS( expr ) All numeric types except decimal floating point numbers(십진 부동 소숫점 숫자를 제외한 모든 숫자 유형) 인자(argument의 유형)
CEIL(arg) 소수점 이하 자릿수가 있는 DEC, CURR 및 QUAN 결과 길이에 소수점 이하 자릿수가 없는 DEC
DIV( expr1,expr2 ) 소수점 이하 자릿수가 없는 INT1, INT2, INT4 및 INT8과 DEC, CURR 및 QUAN 값 범위가 가장 큰 인수의 유형
DIVISION( expr1,expr2,dec ) expr1, expr2 : 소수점 이하 자릿수가 없는 INT1, INT2, INT4 및 INT8과 DEC, CURR 및 QUAN

dec: 리터럴 또는 상수 호스트 변수(ABAP 유형 b, s, i, int8이 0보다 크고 최대값 6보다 크지 않으며, exp2의 길이에 exp1의 소수점 이하 자릿수를 더한 값 1을 더한 값)입니다.
소수점 이하 자릿수가 있는 DEC입니다. 결과의 길이는 exp1의 소수점 이하 자릿수를 뺀 길이에서 exp2의 소수점 이하 자릿수를 더한 값입니다. 이 값은 31보다 크지 않아야 합니다.
FLOOR( expr ) 소숫점 이하 자릿수가 있는 DEC, CURR, and QUAN  결과 길이에 소수점 이하 자릿수가 없는 DEC
MOD( expr1,expr2 ) 소숫점 이하 자릿수가 없는 INT1, INT2, INT4, and INT8 plus DEC, CURR, QUAN  값 범위가 가장 큰 인수의 유형
ROUND( expr,pos ) expr: INT1, INT2, INT4, INT8, DEC, CURR, and QUAN

pos: INT1, INT2, and INT4
INT1과 INT2는 INT4 이후에 업데이트되고 CURR과 QUAN은 DEC 이후에 업데이트되는 expr의 유형입니다.

* MOD와 DIV는 ABAP 프로그래밍에서의 MOD와 DIV와 다르게 계산된다는 것을 알고 있어야함


ABS : 절댓값 함수


SQL Function Result CDS View OPEN SQL
ABS(arg) 인수의 절댓값 가능 가능
SELECT
   ABS( -12 ) AS ABS
  FROM DEMO_EXPRESSIONS
  INTO TABLE @DATA(LS_ITAB).

 


CEIL : 올림


SQL Function Result CDS View OPEN SQL
ABS(arg) 인수의 값보다 작지 않은 최소 정수 가능 가능

SELECT
 PRICE AS PRICE1,
 CEIL( PRICE ) AS CEIL1,
 PRICE * -1 AS PRICE2,
 CEIL( PRICE * -1 ) AS CEIL2
 FROM SFLIGHT
 INTO TABLE @DATA(LT_ITAB)
 WHERE CARRID = 'AA'.

 


DIV : 나누기


SQL Function Result CDS View OPEN SQL
DIV(arg1, arg2) 인수1을 인수2로 나눈 정수 부분 금액을 나눈 후 부호가 할당되며, 인수의 부호가 같으면 양수, 인수의 부호가 다르면 음수가 됩니다.

예외: arg2의 값은 0일 때, Dump 발생
가능 가능
SELECT
 NUM1 AS NUM1,
 NUM2 AS NUM2,
 DIV( NUM1, NUM2 ) AS DIV1
 FROM DEMO_EXPRESSIONS
 INTO TABLE @DATA(LT_ITAB).

arg2가 0인 경우,  CX_SY_OPEN_SQL_DB 에러가 생기므로, TRY~CATCH를 사용하던가, 0인 경우에는 SELECT를 타지 않도록 SELECT 문의 수정이 필요.


DIVISION


SQL Function Result CDS View OPEN SQL
DIVISION( expr1,expr2,dec ) arg1을 arg2로 나눕니다. 결과는 소수점 둘째 자리에서 반올림됩니다. 가능 가능
SELECT
 NUM1 AS NUM1,
 NUM2 AS NUM2,
 DIVISION( NUM1, NUM2, 1 ) AS DIVISION1,
 DIVISION( NUM1, NUM2, 2 ) AS DIVISION2,
 DIVISION( NUM1, NUM2, 3 ) AS DIVISION3
 FROM DEMO_EXPRESSIONS
 INTO TABLE @DATA(LT_ITAB).


FLOOR : 내림


SQL Function Result CDS View OPEN SQL
FLOOR(arg) 인수의 값보다 크지 않은 가장 큰 정수입니다. 가능 가능
SELECT
 PRICE AS PRICE1,
 FLOOR( PRICE ) AS CEIL1,
 PRICE * -1 AS PRICE2,
 FLOOR( PRICE * -1 ) AS CEIL2
 FROM SFLIGHT
 INTO TABLE @DATA(LT_ITAB)
 WHERE CARRID = 'AA'.

 


MOD : 나머지


SQL Function Result CDS View OPEN SQL
MOD(arg1, arg2) 인수1을 인수2로 나눈 나머지 양의 정수 또는 음의 정수입니다. 가능 가능
SELECT
 NUM1 AS NUM1,
 NUM2 AS NUM2,
 DIV( NUM1, NUM2 ) AS DIV
 MOD( NUM1, NUM2 ) AS MOD
 FROM DEMO_EXPRESSIONS
 INTO TABLE @DATA(LT_ITAB).


ROUND : 반올림


SQL Function Result CDS View OPEN SQL
ROUND(arg, pos) 인수의 반올림된 값입니다. pos가 0보다 크면 소수점 구분 기호 오른쪽의 위치 pos로 값이 반올림됩니다. 그렇지 않은 경우 소수점 구분 기호 왼쪽의 abs(pos)+1 위치로 반올림됩니다. 자릿수가 충분하지 않은 경우 0이 됩니다. 가능 가능
SELECT
 PRICE AS PRICE1,
 ROUND( PRICE, 1 ) AS ROUND1,
 PRICE * -1 AS PRICE2,
 ROUND( PRICE * -1, 1 ) AS ROUND3
 FROM SFLIGHT
 WHERE CARRID = 'AA'
 INTO TABLE @DATA(LT_ITAB).

반응형