문법
... 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'.
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).
반응형
'ABAP 프로그래밍 개념 > OPEN SQL' 카테고리의 다른 글
CASE Function 1 : Simple Case (0) | 2023.09.03 |
---|---|
String Function (0) | 2023.08.09 |
OPEN SQL의 사용 (0) | 2023.08.05 |
5. Processing Data from Databases via Internal Tables and Structures (1) | 2023.05.05 |
4. Selecting Data from Multiple Tables (0) | 2023.05.04 |