SAP HANA SQL 함수: 유형 및 예제
⚡ 스마트 요약
SAP HANA SQL 함수는 데이터를 애플리케이션 계층으로 이동시키지 않고 쿼리 내에서 값을 변환합니다. 데이터 유형 변환, 날짜 및 시간, 전체 텍스트, 숫자, 문자열, 윈도우 및 기타 작업의 7가지 범주가 있습니다.

SAP HANA SQL 함수
SAP HANA는 다음을 제공합니다. SAP HANA 기능-
- 데이터 유형 변환 기능 – 데이터 유형 변환 기능은 하나의 데이터 유형을 다른 데이터 유형으로 변환하는 데 사용됩니다. 다음은 데이터 유형 변환 함수(예: CAST, TO_ALPHANUM, TO_BIGINT, TO_BINARY 등) 목록입니다.
- 날짜 시간 기능 - 날짜/시간 함수는 날짜/시간을 다른 형식으로 변환하는 데 사용됩니다. 예: ADD_DAYS, ADD_MONTHS, ADD_SECOND 등.
- 전문 기능 – 전체 텍스트 기능은 텍스트 검색에 사용됩니다. 예: SCORE 등.
- 숫자 기능 - 숫자 함수는 숫자 값 또는 숫자 문자가 포함된 문자열을 입력으로 받아 숫자 값을 반환합니다. 예: 절댓값, 반올림, 거듭제곱 등
- 문자열 함수 – 문자열 함수는 문자열을 입력으로 받아 함수 이름에 따라 처리하고 값을 반환합니다. 예: (ASCII, CHAR, CONCAT 등)
- 창 기능 – 윈도우 함수를 사용하면 쿼리 결과 집합을 윈도우 파티션이라는 이름의 행 그룹으로 나눌 수 있습니다. 예: RANK(), DENSE_RANK(), ROW_NUMBER() 등.
- 기타 기능- 기타 작업에 사용되는 몇 가지 추가 기능이 있습니다. 예: CONVERT_CURRENCY, CURRENT_SCHEMA 등
위의 모든 함수는 데이터베이스 엔진 내부에서 평가되므로, 로직을 함수에 넣는 것이 애플리케이션에서 행을 가져와 처리하는 것보다 거의 항상 더 빠릅니다. 아래 예제에서는 더미 테이블(DUMMY 테이블)을 사용하는데, 이 테이블은 실제 데이터를 건드리지 않고 표현식을 테스트할 수 있도록 존재하는 단일 행 시스템 테이블입니다.
스칼라 함수, 집계 함수 및 윈도우 함수
예제를 살펴보기 전에, 함수가 쿼리에서 어떻게 동작하는지를 결정하는 한 가지 중요한 차이점을 알아두어야 합니다. 바로 입력되는 행의 수와 출력되는 행의 수입니다.
| 카테고리 | 들어오는 행 수 : 나가는 행 수 | 그룹화(GROUP BY)가 필요하신가요? | 예 |
|---|---|---|---|
| 스칼라 | 한 줄씩 나란히 | 아니 | 상, 원형, 날짜, 캐스트 |
| 골재 | 여러 행을 한 행으로 | 네, 전체 세트가 하나의 그룹이 아닌 경우에는 그렇습니다. | 합집합, AVG, 개수, 최소값, 최대값 |
| 창 | 여러 행에서 여러 행으로 | 아니요, OVER를 사용합니다. | 순위, 밀집 순위, 행 수, 지연 |
| 작업대 | 결과 집합을 반환합니다. | FROM 절에서 사용됨 | 시리즈 생성 날짜 |
실질적인 결과는 집계 함수는 세부 정보를 축소하는 반면 윈도우 함수는 이를 보존한다는 것입니다. 각 직원과 해당 부서의 평균을 함께 요청하려면 윈도우 함수가 필요합니다. GROUP BY를 사용하면 개별 행이 완전히 제거되기 때문입니다.
공통의 SAP HANA 함수 및 예제
아래 명령문은 SQL 콘솔에 바로 붙여넣을 수 있습니다. 각 명령문은 위 목록의 한 범주를 보여줍니다.
1) 문자열 함수. 이 함수들은 문자 입력을 받아 파생 값을 반환합니다.
SELECT UPPER('sap hana') AS UPPER_TEXT, LENGTH('SAP HANA') AS TEXT_LENGTH, CONCAT('SAP ', 'HANA') AS JOINED, SUBSTRING('SAP HANA', 5, 4) AS PART, REPLACE('SAP HANA', 'HANA', 'S/4') AS SWAPPED, TRIM(' padded ') AS CLEANED FROM DUMMY;
2) 수의 함수. 반올림 동작은 테스트해 볼 가치가 있습니다. ROUND는 상용 반올림 방식을 사용하는 반면 FLOOR와 CEIL은 항상 한 방향으로만 움직이기 때문입니다.
SELECT ABS(-45.7) AS ABSOLUTE_VALUE, ROUND(123.4567, 2) AS ROUNDED, FLOOR(9.9) AS ROUNDED_DOWN, CEIL(9.1) AS ROUNDED_UP, POWER(2, 10) AS RAISED, MOD(17, 5) AS REMAINDER FROM DUMMY;
3) 날짜 및 시간 기능. 이것들은 기간별 보고에 가장 자주 필요한 항목들입니다.
SELECT CURRENT_DATE AS TODAY, ADD_DAYS(CURRENT_DATE, 30) AS IN_30_DAYS, ADD_MONTHS(CURRENT_DATE, -1) AS LAST_MONTH, DAYS_BETWEEN('2026-01-01', CURRENT_DATE) AS ELAPSED, LAST_DAY(CURRENT_DATE) AS MONTH_END, WEEKDAY(CURRENT_DATE) AS DAY_INDEX FROM DUMMY;
4) 변환 기능. 명시적 변환은 WHERE 절의 속도를 저하시키는 암묵적인 유형 강제 변환을 방지합니다.
SELECT CAST('1234' AS INTEGER) AS AS_NUMBER, TO_VARCHAR(CURRENT_DATE, 'DD.MM.YYYY') AS AS_TEXT, TO_DECIMAL(1234.5678, 10, 2) AS AS_DECIMAL FROM DUMMY;
타입 동작 및 각 대상 타입의 한계는 다음에서 다룹니다. SAP HANA 데이터 유형.
윈도우 함수 설명
윈도우 함수는 현재 행과 관련된 행 집합에 걸쳐 계산을 수행하며, 행들을 병합하지 않습니다. OVER 절은 이러한 행 집합을 정의하며, 두 가지 선택적 요소가 있습니다. PARTITION BY는 데이터를 그룹으로 분할하고, ORDER BY는 각 그룹 내에서 순서를 지정합니다.
SELECT DEPARTMENT, EMP_NAME, SALARY, ROW_NUMBER() OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS ROW_NUM, RANK() OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS RANKING, DENSE_RANK() OVER (PARTITION BY DEPARTMENT ORDER BY SALARY DESC) AS DENSE_RANKING, SUM(SALARY) OVER (PARTITION BY DEPARTMENT) AS DEPT_TOTAL FROM DHK_SCHEMA.EMPLOYEE;
세 가지 순위 지정 함수는 값이 같을 때만 차이가 납니다.
- 행 번호 동점은 절대 발생하지 않습니다. 동일한 급여를 받는 두 사람이라도 임의로 1과 2를 받게 됩니다.
- 계급 동점인 행에는 같은 번호를 부여하고 그 다음에는 건너뜁니다. 1인 두 행 다음에 3인 행이 옵니다.
- 밀집 순위 동점인 행에는 같은 번호를 부여하고 건너뛰지 않습니다. 1인 두 행 다음에는 2인 행이 옵니다.
ROW_NUMBER는 중복 제거에, RANK는 경쟁 방식 순위 지정에, DENSE_RANK는 순서가 끊어지지 않아야 할 때 사용합니다. 이러한 함수와 함께 사용되는 비교 및 논리 기호는 다음에서 다룹니다. SAP HANA 연산자그리고 문장 구조는 다음과 같습니다. SAP 하나SQL.
