-
SAP HANA SQL Functions 완전 정리 (Platform 2.0 SPS07)SAP 2026. 5. 20. 20:10
SAP HANA SQL Functions 완전 정리 (Platform 2.0 SPS07) 📘 SAP HANA SQL Reference Guide · Platform 2.0 SPS07SAP HANA SQL Functions 완전 정리
p.83 ~ p.430 · Section 4.9 SQL Functions📋 목차- SQL Functions 개요
- Aggregate Functions (집계 함수)
- Array Functions (배열 함수)
- Data Type Conversion Functions (타입 변환)
- Datetime Functions (날짜/시간 함수)
- Fulltext Functions (전문 검색 함수)
- Hierarchy Functions (계층 함수)
- JSON Functions
- Miscellaneous Functions (기타 함수)
- Numeric Functions (숫자 함수)
- Security Functions (보안 함수)
- Series Data Functions (시계열 함수)
- String Functions (문자열 함수)
- Window Functions (윈도우 함수)
1. SQL Functions 개요 p.83
SAP HANA는 다양한 내장(Built-in) SQL 함수를 제공하며, 분석 함수(Analytic Functions)는 집계 함수(Aggregate) 및 윈도우 집계 함수(Window Aggregate)로 분류됩니다. AMDP SQLScript 내에서도 표준 SQL 함수를 그대로 사용할 수 있습니다.
카테고리 설명 함수 수 Aggregate 그룹 행으로부터 집계 값 계산 19 Array 배열 입력 처리 4 Data Type Conversion 데이터 타입 변환 25 Datetime 날짜·시간 연산 및 정보 반환 39 Fulltext 전문(Full-text) 인덱스 데이터 처리 8 Hierarchy 트리/그래프 계층 데이터 처리 11 JSON JSON 데이터 반환 및 조작 3 Miscellaneous 시스템 값 반환, 다목적 연산 37 Numeric 수치 데이터 수학 연산 33 Security 보안 목적 특수 기능 6 Series Data 시계열 데이터 특수 기능 5 String 문자열 추출·조작·정보 반환 45 Window 입력 행 집합에 대한 분석 연산 16+ 💡 AMDP 개발 시 참고 SQLScript 내에서 모든 SQL 함수를 직접 사용할 수 있습니다. 특히SESSION_CONTEXT('CLIENT')(Miscellaneous),COALESCE,IFNULL, 날짜 함수, 문자열 함수가 자주 활용됩니다.
2. Aggregate Functions p.417
📊 집계 함수그룹 행으로부터 하나의 집계 값을 계산하는 분석 함수입니다. Window 함수의
OVER()절과 함께 사용 가능합니다.함수 설명 예시 AUTO_CORR(col, lag)자기상관(Autocorrelation) 계산 시계열 분석 AVG(expr)산술 평균 반환 AVG(price)CORR(col1, col2)피어슨 상관계수 (-1 ~ 1) 두 컬럼 상관분석 CORR_SPEARMAN(col1, col2)스피어만 순위 상관계수 비선형 관계 분석 COUNT(*)행 수 반환 (NULL 포함/제외) COUNT(DISTINCT id)CROSS_CORR(col1, col2, lag)교차상관 계산 두 시계열 비교 DFT(col)이산 푸리에 변환(Discrete Fourier Transform) 주파수 분석 FIRST_VALUE(expr)정렬 후 첫 번째 값 반환 Window 함수로 사용 가능 LAST_VALUE(expr)정렬 후 마지막 값 반환 Window 함수로 사용 가능 MAX(expr)최대값 반환 MAX(salary)MEDIAN(expr)통계 중앙값 반환 Window 함수로도 사용 가능 MIN(expr)최소값 반환 MIN(price)NTH_VALUE(expr, n)n번째 값 반환 Window 함수로 사용 STDDEV(expr)표준편차 (STDDEV_SAMP 동일) 통계 분석 STDDEV_POP(expr)모표준편차 STDDEV_SAMP(expr)표본표준편차 STRING_AGG(expr, sep)문자열 연결 집계 STRING_AGG(name, ',')SUM(expr)합계 반환 SUM(amount)VAR(expr)분산 (VAR_SAMP 동일) VAR_POP(expr)모분산 VAR_SAMP(expr)표본분산 -- AVG, MAX, MIN, SUM 기본 사용 SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) FROM employees GROUP BY dept_id; -- STRING_AGG: 부서별 직원 이름 연결 SELECT dept_id, STRING_AGG(emp_name, ', ' ORDER BY emp_name) AS names FROM employees GROUP BY dept_id;
3. Array Functions p.418
📦 배열 함수배열(Array) 타입을 입력으로 받는 함수입니다.
함수 설명 CARDINALITY(array)배열의 요소 수(크기) 반환 MEMBER_AT(array, pos)지정 위치의 배열 요소 반환 (1-based) SUBARRAY(array, start [,end])배열의 부분 배열 반환 TRIM_ARRAY(array, n)끝에서 n개 요소를 제거한 배열 반환
4. Data Type Conversion Functions p.419
🔄 타입 변환 함수데이터를 한 타입에서 다른 타입으로 변환합니다. 수치형 변환 시 소수점 이하는 0 방향으로 잘립니다.
4-1. CAST 함수
-- CAST: 가장 범용적인 타입 변환 CAST( <expression> AS <data_type>[ ( <length> ) ] ) SELECT CAST(7 AS VARCHAR) -- 결과: '7' SELECT CAST(10.5 AS INTEGER) -- 결과: 10 (truncate) SELECT CAST('2024-01-15' AS DATE)4-2. TO_* 변환 함수 전체 목록
TO_VARCHARConversion값을 VARCHAR로 변환TO_VARCHAR(val [, fmt])TO_NVARCHARConversion값을 NVARCHAR로 변환TO_NVARCHAR(val [, fmt])TO_INTEGER / TO_INTConversion정수(INTEGER)로 변환TO_INTEGER(val)TO_BIGINTConversionBIGINT로 변환TO_BIGINT(val)TO_DECIMALConversionDECIMAL(p,s)로 변환TO_DECIMAL(val [,p,s])TO_DOUBLEConversionDOUBLE 부동소수점으로 변환TO_DOUBLE(val)TO_DATEConversionDATE 타입으로 변환TO_DATE(val [, fmt])TO_TIMESTAMPConversionTIMESTAMP로 변환TO_TIMESTAMP(val [, fmt])TO_TIMEConversionTIME 타입으로 변환TO_TIME(val [, fmt])TO_SECONDDATEConversionSECONDDATE 타입으로 변환TO_SECONDDATE(val [, fmt])TO_DATSConversionABAP DATS 형식으로 변환 (YYYYMMDD)TO_DATS(val)TO_ALPHANUMConversionALPHANUM 타입으로 변환TO_ALPHANUM(val)TO_BLOB / TO_CLOB / TO_NCLOBConversionLOB 타입으로 변환TO_BLOB(val)TO_BINARYConversionBINARY 타입으로 변환TO_BINARY(val)TO_FIXEDCHARConversionCHAR 고정 길이 문자열로 변환TO_FIXEDCHAR(val, n)TO_JSON_BOOLEANConversionJSON Boolean으로 변환TO_JSON_BOOLEAN(val)TO_REALConversionREAL(4byte 부동소수)으로 변환TO_REAL(val)TO_SMALLDECIMALConversionSMALLDECIMAL로 변환TO_SMALLDECIMAL(val)TO_SMALLINTConversionSMALLINT로 변환TO_SMALLINT(val)TO_TINYINTConversionTINYINT(0~255)로 변환TO_TINYINT(val)TO_BOOLEANConversionBOOLEAN으로 변환TO_BOOLEAN(val)-- 날짜 형식 변환 예시 SELECT TO_DATE('2024-01-15', 'YYYY-MM-DD') FROM DUMMY; SELECT TO_VARCHAR(CURRENT_DATE, 'YYYYMMDD') FROM DUMMY; -- ABAP DATS 형식 (YYYYMMDD 문자열 → DATE) SELECT TO_DATE(TO_DATS('2024-01-15')) FROM DUMMY;
5. Datetime Functions p.420
📅 날짜/시간 함수5-1. 현재 날짜/시간 반환
함수 반환값 설명 CURRENT_DATEDATE 현재 로컬 날짜 CURRENT_TIMETIME 현재 로컬 시간 CURRENT_TIMESTAMPTIMESTAMP 현재 로컬 타임스탬프 (YYYY-MM-DD HH:MI:SS.FF) CURRENT_UTCDATEDATE 현재 UTC 날짜 CURRENT_UTCTIMETIME 현재 UTC 시간 CURRENT_UTCTIMESTAMPTIMESTAMP 현재 UTC 타임스탬프 NOW()TIMESTAMP CURRENT_TIMESTAMP와 동일 5-2. 날짜 덧셈/뺄셈
함수 문법 설명 ADD_DAYSADD_DAYS(date, n)날짜에 n일 가감. 음수면 감산. ADD_MONTHSADD_MONTHS(date, n)날짜에 n개월 가감 ADD_MONTHS_LASTADD_MONTHS_LAST(date, n)가감 후 월말 유지 (말일→말일) ADD_SECONDSADD_SECONDS(ts, n)n초 가감 ADD_NANO100ADD_NANO100(ts, n)100나노초 단위 가감 ADD_YEARSADD_YEARS(date, n)n년 가감 ADD_WORKDAYSADD_WORKDAYS(date, n, cal)n 영업일 가감 (공장달력 적용) NEXT_DAYNEXT_DAY(date)다음 날 반환 LAST_DAYLAST_DAY(date)해당 월의 마지막 날 반환 5-3. 날짜 차이 계산
함수 설명 DAYS_BETWEEN(d1, d2)두 날짜 사이의 일 수 (d2 - d1) MONTHS_BETWEEN(d1, d2)두 날짜 사이의 개월 수 YEARS_BETWEEN(d1, d2)두 날짜 사이의 연도 수 SECONDS_BETWEEN(ts1, ts2)두 타임스탬프 사이의 초 NANO100_BETWEEN(ts1, ts2)두 타임스탬프 사이의 100나노초 WORKDAYS_BETWEEN(d1, d2, cal)두 날짜 사이의 영업일 수 5-4. 날짜 구성요소 추출
함수 반환 예시 결과 YEAR(date)INTEGER 2024 MONTH(date)INTEGER 1 ~ 12 DAYOFMONTH(date)INTEGER 1 ~ 31 DAYOFYEAR(date)INTEGER 1 ~ 366 DAYNAME(date)VARCHAR 'Monday' ~ 'Sunday' MONTHNAME(date)VARCHAR 'January' ~ 'December' QUARTER(date)INTEGER 1 ~ 4 WEEK(date)INTEGER 1 ~ 53 WEEKDAY(date)INTEGER 0(월) ~ 6(일) ISOWEEK(date)VARCHAR '2024.03' (ISO 주차) HOUR(time)INTEGER 0 ~ 23 MINUTE(time)INTEGER 0 ~ 59 SECOND(time)INTEGER 0 ~ 59 EXTRACT(part FROM date)INTEGER EXTRACT(YEAR FROM date)5-5. 시간대 변환
함수 설명 UTCTOLOCAL(ts, tz)UTC → 로컬 시간 변환 LOCALTOUTC(ts, tz)로컬 → UTC 시간 변환 -- AMDP에서 자주 쓰는 날짜 패턴 SELECT ADD_MONTHS(CURRENT_DATE, -3) FROM DUMMY; -- 3개월 전 SELECT DAYS_BETWEEN('2024-01-01', CURRENT_DATE) FROM DUMMY; -- 경과 일수 SELECT TO_VARCHAR(CURRENT_DATE, 'YYYYMMDD') FROM DUMMY; -- DATS 형식 문자열
6. Fulltext Functions p.421
🔍 전문 검색 함수전문(Full-text) 인덱스가 있는 데이터에 대해 동작하는 함수입니다.
함수 설명 SCORE()CONTAINS 검색의 관련도 점수 반환 (0 ~ 1) LANGUAGE(col)텍스트 컬럼의 감지된 언어 반환 PLAINTEXT(col)바이너리/HTML 등에서 순수 텍스트 추출 MIMETYPE(col)컬럼의 MIME 타입 반환 INDEXING_ERROR_CODE(col)인덱싱 오류 코드 반환 INDEXING_ERROR_MESSAGE(col)인덱싱 오류 메시지 반환 INDEXING_STATUS(col)인덱싱 상태 반환 GROUP_SCORE()그룹 내 최고 관련도 점수 반환
7. Hierarchy Functions p.421
🌲 계층 함수트리·방향 그래프 형태의 계층 데이터 처리 함수입니다. 세 가지 유형으로 나뉩니다.
유형 함수 설명 Generator HIERARCHY기본 계층 구조 생성 HIERARCHY_LEVELED레벨 기반 계층 생성 HIERARCHY_SPANTREE신장 트리(Spanning Tree) 생성 HIERARCHY_TEMPORAL시간 기반 계층 생성 Navigation HIERARCHY_ANCESTORS조상(부모 이상) 노드 탐색 HIERARCHY_ANCESTORS_AGGREGATE조상 노드 집계 HIERARCHY_DESCENDANTS자손(자식 이하) 노드 탐색 HIERARCHY_DESCENDANTS_AGGREGATE자손 노드 집계 HIERARCHY_SIBLINGS형제 노드 탐색 Scalar HIERARCHY_COMPOSITE_ID계층 복합 ID 생성 💡 계층 함수의 전체 문서는 SAP HANA Hierarchy Developer Guide를 참조하십시오. AMDP에서는 주로 BOM(Bill of Materials) 전개, 조직도 등에 활용됩니다.
8. JSON Functions p.422
📄 JSON 함수함수 문법 설명 JSON_VALUEJSON_VALUE(json_str, path)JSON 문자열에서 경로로 스칼라 값 추출 JSON_QUERYJSON_QUERY(json_str, path)JSON 객체·배열 추출 (객체/배열 반환) JSON_TABLEJSON_TABLE(json_str, path COLUMNS(...))JSON을 관계형 테이블 형태로 변환 -- JSON_VALUE: 단일 값 추출 SELECT JSON_VALUE('{"name":"홍길동","age":30}', '$.name') FROM DUMMY; -- 결과: 홍길동 -- JSON_TABLE: JSON → 테이블 변환 SELECT jt.* FROM JSON_TABLE( '[{"id":1,"name":"A"},{"id":2,"name":"B"}]', '$[*]' COLUMNS ( id INTEGER PATH '$.id', name VARCHAR(50) PATH '$.name' ) ) AS jt;
9. Miscellaneous Functions p.423
⚙️ 기타(Miscellaneous) 함수시스템 값 반환, NULL 처리, 통화·단위 변환 등 다목적 함수 모음입니다.
9-1. NULL 처리
함수 문법 설명 COALESCECOALESCE(expr1, expr2, ...)첫 번째 non-NULL 값 반환. 최소 2개 이상의 인자 필요. IFNULLIFNULL(expr1, expr2)expr1이 NULL이면 expr2 반환. COALESCE(e1,e2)와 동일. NULLIFNULLIF(expr1, expr2)expr1 = expr2이면 NULL, 아니면 expr1 반환. 9-2. 세션/시스템 정보
함수 설명 SESSION_CONTEXT(var)세션 변수 값 반환. AMDP에서 SESSION_CONTEXT('CLIENT')로 만다트 클라이언트 읽기.SESSION_USER현재 세션 사용자 이름 반환 CURRENT_USER현재 유저 이름 (DEFINER 모드 영향 받음) CURRENT_SCHEMA현재 스키마 이름 반환 CURRENT_CONNECTION현재 연결 ID 반환 CURRENT_USER_ID현재 유저의 내부 ID 반환 CURRENT_SITE_ID()System Replication 사이트 ID 반환 CURRENT_DATABASE현재 데이터베이스 이름 반환 ⚠️ AMDP에서 SESSION_CONTEXT('CLIENT') 필수 패턴 AMDP BY DATABASE PROCEDURE에서는SESSION_CONTEXT('CLIENT')로 클라이언트를 필터링해야 합니다.SESSION_CONTEXT('CDS_CLIENT')는 CDS Table Function AMDP에서 사용합니다.-- AMDP에서의 SESSION_CONTEXT 사용 패턴 DECLARE lv_client NVARCHAR(3); lv_client := SESSION_CONTEXT('CLIENT'); SELECT * FROM "MARA" WHERE mandt = lv_client AND mtart = :iv_mtart;9-3. 비교·조건
함수 문법 설명 GREATESTGREATEST(v1, v2, ...)인자 중 최대값 반환 (NULL 무시) LEASTLEAST(v1, v2, ...)인자 중 최소값 반환 (NULL 무시) MAPMAP(val, k1,v1, k2,v2, ..., def)DECODE와 유사. 조건-결과 쌍 매핑. WIDTH_BUCKETWIDTH_BUCKET(val, lo, hi, n)히스토그램 버킷 번호 반환 9-4. 해시·UUID·암호화
함수 설명 HASH_MD5(val)MD5 해시값 반환 (VARBINARY) HASH_SHA256(val)SHA-256 해시값 반환 NEWUID()새 UUID 생성 반환 SYSUUID시스템 UUID 반환 9-5. 통화·단위 변환
함수 설명 CONVERT_CURRENCY통화 환율 기반 금액 변환 (TCURR 참조) CONVERT_UNIT단위 변환 (T006 참조) 9-6. GROUPING 관련
함수 설명 GROUPING(col)ROLLUP/CUBE 집계 행 여부 판별 (1=집계행, 0=일반행) GROUPING_ID(col1, col2, ...)각 컬럼의 GROUPING 비트 조합으로 정수 반환
10. Numeric Functions p.424
🔢 숫자 함수수치 데이터 타입에 대한 수학 연산을 수행합니다. 문자열 숫자 입력 시 자동으로 묵시적 변환이 적용됩니다.
10-1. 기본 수학 함수
함수 문법 설명 ABSABS(n)절대값 반환 CEILCEIL(n)올림 (n 이상 최소 정수) FLOORFLOOR(n)내림 (n 이하 최대 정수) ROUNDROUND(n [,d])반올림. d=소수 자리수 (음수 가능) MODMOD(n, m)나머지 (n mod m) POWERPOWER(b, e)거듭제곱 b^e SQRTSQRT(n)제곱근 EXPEXP(n)e^n 반환 LNLN(n)자연로그 ln(n) LOGLOG(b, n)밑수 b의 로그 log_b(n) SIGNSIGN(n)부호 반환 (-1, 0, 1) RANDRAND()0~1 사이 난수 반환 RAND_SECURERAND_SECURE()보안 난수 (암호학적으로 안전) NDIV0NDIV0(n, d)d=0이면 0 반환 (ZeroDivide 방지) UMINUSUMINUS(n)단항 음수 반환 (-n) 10-2. 삼각 함수
함수 설명 함수 설명 SIN(n)사인 (라디안) ASIN(n)역사인 COS(n)코사인 (라디안) ACOS(n)역코사인 TAN(n)탄젠트 (라디안) ATAN(n)역탄젠트 SINH(n)쌍곡사인 ATAN2(y,x)2인수 역탄젠트 COSH(n)쌍곡코사인 COT(n)코탄젠트 TANH(n)쌍곡탄젠트 10-3. 비트 연산 함수
함수 설명 BITAND(n1, n2)비트 AND 연산 BITOR(n1, n2)비트 OR 연산 BITXOR(n1, n2)비트 XOR 연산 BITNOT(n)비트 NOT 연산 BITCOUNT(n)설정된 비트(1) 개수 반환 BITSET(n, pos)지정 위치 비트를 1로 설정 BITUNSET(n, pos)지정 위치 비트를 0으로 설정 -- 자주 쓰는 숫자 함수 패턴 SELECT ROUND(3.14159, 2) FROM DUMMY; -- 3.14 SELECT CEIL(14.5) FROM DUMMY; -- 15 SELECT FLOOR(14.9) FROM DUMMY; -- 14 SELECT MOD(10, 3) FROM DUMMY; -- 1 SELECT NDIV0(100, 0) FROM DUMMY; -- 0 (나눗셈 0 방지) SELECT ABS(-99) FROM DUMMY; -- 99
11. Security Functions p.425
🔐 보안 함수함수 설명 ESCAPE_SINGLE_QUOTES(str)문자열 내 단따옴표(') 이스케이프. SQL Injection 방지. ESCAPE_DOUBLE_QUOTES(str)문자열 내 이중따옴표(") 이스케이프 IS_SQL_INJECTION_SAFE(str)SQL Injection 위험 여부 판별. 안전하면 1 반환. GENERATE_PASSWORD()보안 정책을 따르는 랜덤 패스워드 생성 ENCRYPTION_ROOT_KEYS_EXTRACT_KEYS암호화 루트 키 추출 ENCRYPTION_ROOT_KEYS_HAS_BACKUP_PASSWORD백업 패스워드 존재 여부 확인 ⚠️ EXECUTE IMMEDIATE 사용 시 필수 동적 SQL 실행 시에는 반드시ESCAPE_SINGLE_QUOTES()로 입력값을 이스케이프하거나?바인딩 방식(USING)을 사용해야 SQL Injection을 방지할 수 있습니다.
12. Series Data Functions p.425
📈 시계열(Series Data) 함수등간격 시계열 데이터 및 시리즈 테이블에 특화된 함수입니다.
함수 설명 SERIES_GENERATE지정 간격의 시계열 데이터 생성 (날짜/숫자) SERIES_DISAGGREGATE집계된 시계열을 세분화(Disaggregate) SERIES_ELEMENT_TO_PERIOD시리즈 요소 인덱스 → 기간(Period) 변환 SERIES_PERIOD_TO_ELEMENT기간(Period) → 시리즈 요소 인덱스 변환 SERIES_ROUND시계열 값을 지정 간격으로 반올림
13. String Functions p.426
📝 문자열 함수문자열 추출·조작·정보 반환 함수입니다. AMDP에서 가장 빈번하게 사용되는 카테고리입니다.
13-1. 기본 문자열 조작
함수 문법 설명 CONCATCONCAT(s1, s2)두 문자열 연결. ||연산자와 동일.CONCAT_NAZCONCAT_NAZ(s1, s2)NULL을 빈 문자열로 처리하고 연결 LENGTHLENGTH(str)문자열 길이 (문자 수) 반환 LEFTLEFT(str, n)왼쪽 n개 문자 반환 RIGHTRIGHT(str, n)오른쪽 n개 문자 반환 SUBSTRINGSUBSTRING(str, pos [,len])부분 문자열 추출 (1-based) SUBSTR_AFTERSUBSTR_AFTER(str, sep)구분자 이후 문자열 반환 SUBSTR_BEFORESUBSTR_BEFORE(str, sep)구분자 이전 문자열 반환 REPLACEREPLACE(str, from, to)모든 from 문자열을 to로 치환 TRIMTRIM([LEADING|TRAILING|BOTH] [c] FROM str)앞뒤 공백(또는 지정 문자) 제거 LTRIMLTRIM(str [,chars])왼쪽 공백/문자 제거 RTRIMRTRIM(str [,chars])오른쪽 공백/문자 제거 LPADLPAD(str, n [,pad])왼쪽 패딩으로 n자리 맞춤 RPADRPAD(str, n [,pad])오른쪽 패딩으로 n자리 맞춤 13-2. 대소문자 변환
함수 설명 UPPER(str)/UCASE(str)모든 문자를 대문자로 변환 LOWER(str)/LCASE(str)모든 문자를 소문자로 변환 INITCAP(str)각 단어의 첫 글자를 대문자로 변환 13-3. 검색 및 위치
함수 문법 설명 LOCATELOCATE(str, substr [,start])substr의 위치 반환 (없으면 0) LOCATE_REGEXPRLOCATE_REGEXPR(pattern IN str [OCCURRENCE n])정규식 패턴 위치 반환 OCCURRENCES_REGEXPROCCURRENCES_REGEXPR(pattern IN str)정규식 패턴 출현 횟수 반환 SUBSTRING_REGEXPRSUBSTRING_REGEXPR(pattern IN str [OCCURRENCE n])정규식 매치 부분 문자열 추출 REPLACE_REGEXPRREPLACE_REGEXPR(pattern IN str WITH repl)정규식 매치 부분 치환 13-4. 문자 코드 변환
함수 설명 ASCII(str)첫 문자의 ASCII 코드값 반환 CHAR(n)ASCII 코드값 → 문자 변환 UNICODE(str)첫 문자의 유니코드 코드포인트 반환 NCHAR(n)유니코드 코드포인트 → 문자 변환 BINTOSTR(bin)바이너리 → 문자열 변환 STRTOBIN(str)문자열 → 바이너리 변환 BINTOHEX(bin)바이너리 → 16진수 문자열 BINTONHEX(bin)바이너리 → 16진수 (대문자 없이) HEXTOBIN(str)16진수 문자열 → 바이너리 HEXTONUM(str)16진수 문자열 → 숫자 NUMTOHEX(n)숫자 → 16진수 문자열 13-5. ABAP 전용 문자열 함수
함수 설명 ABAP_ALPHANUM(str, chars)숫자 문자열이면 앞에 0 패딩 (ALPHANUM 변환 모사) ABAP_NUMC(str, chars)NUMC 타입 변환 모사 (숫자 우측정렬, 0 패딩) ABAP_UPPER(str)ABAP 대문자 변환 규칙 적용 ABAP_LOWER(str)ABAP 소문자 변환 규칙 적용 ABAP_DF16RAW_TO_SMALLDECIMAL(bin)ABAP DF16_RAW → SMALLDECIMAL 변환 ABAP_DF34RAW_TO_DECIMAL(bin)ABAP DF34_RAW → DECIMAL 변환 13-6. 기타 문자열 함수
함수 설명 SOUNDEX(str)영어 발음 기반 음성 인코딩 반환 HAMMING_DISTANCE(s1, s2)두 문자열의 해밍 거리(다른 문자 위치 수) NORMALIZE(str)유니코드 정규화 (NFC/NFD/NFKC/NFKD) XMLTABLEXML 문자열 → 관계형 테이블 변환 -- 자주 쓰는 문자열 함수 패턴 SELECT CONCAT(first_name, ' ' || last_name) FROM employees; SELECT LPAD(matnr, 18, '0') FROM DUMMY; -- 자재번호 18자리 SELECT TRIM(LEADING '0' FROM '00012345') FROM DUMMY; -- 앞 0 제거 SELECT SUBSTR_AFTER('ABC-DEF', '-') FROM DUMMY; -- 'DEF' SELECT LOCATE('ABCDEF', 'CD') FROM DUMMY; -- 3 SELECT REPLACE(memo, CHR(10), ' ') FROM DUMMY; -- 개행 제거 -- 정규식 활용 SELECT REPLACE_REGEXPR('\s+' IN text WITH ' ') FROM DUMMY; -- 연속 공백 단일화
14. Window Functions & Window Specification p.427
🪟 윈도우 함수쿼리 결과 집합을 윈도우 파티션(Window Partition)으로 분할하여, 각 행에 대해 분석 연산을 수행하는 함수입니다.
GROUP BY와 달리 원본 행을 유지하며 집계 결과를 동시에 보여줍니다.14-1. Window Function 문법 구조
<function_name> OVER ( [ PARTITION BY <expression>, ... ] [ ORDER BY <expression> [ASC|DESC] [NULLS FIRST|LAST] ] [ ROWS BETWEEN <frame_start> AND <frame_end> ] )14-2. Window Frame Clause
옵션 설명 UNBOUNDED PRECEDING파티션의 첫 번째 행부터 n PRECEDING현재 행 기준 n행 앞 CURRENT ROW현재 행 n FOLLOWING현재 행 기준 n행 뒤 UNBOUNDED FOLLOWING파티션의 마지막 행까지 💡 Default Frame 규칙
ORDER BY 있으면:UNBOUNDED PRECEDING ~ CURRENT ROW(누적 계산)
ORDER BY 없으면:UNBOUNDED PRECEDING ~ UNBOUNDED FOLLOWING(전체 파티션)14-3. 순위 함수
함수 설명 동점 처리 ROW_NUMBER()파티션 내 순차 행 번호 (1부터) 동점 없이 유일값 RANK()동점 포함 순위 (동점 후 건너뜀) 동점 시 같은 순위, 다음 번호 건너뜀 DENSE_RANK()밀집 순위 (건너뜀 없음) 동점 시 같은 순위, 연속 번호 유지 NTILE(n)n개 버킷으로 균등 분할 – 14-4. 행 이동 함수
함수 문법 설명 LAGLAG(col [,offset [,default]])현재 행 기준 n행 앞 값 참조 LEADLEAD(col [,offset [,default]])현재 행 기준 n행 뒤 값 참조 14-5. 분포·백분위 함수
함수 설명 CUME_DIST()누적 분포 (0 초과 ~ 1 이하) PERCENT_RANK()백분위 순위 (0 이상 ~ 1 이하) PERCENTILE_CONT(p)연속 백분위수 (보간 적용) PERCENTILE_DISC(p)이산 백분위수 (실제 값 반환) 14-6. 분석·보간 함수
함수 설명 LINEAR_APPROX선형 보간(Linear Interpolation) CUBIC_SPLINE_APPROX3차 스플라인 보간 BINNING데이터를 지정 버킷 수로 분류 RANDOM_PARTITION행을 무작위로 N개 파티션에 할당 WEIGHTED_AVG가중 이동 평균 계산 SERIES_FILTER시계열 데이터 필터링 14-7. Window 집계 함수 (ORDER BY 없이도 사용 가능)
다음 함수들은
OVER()절과 함께 사용 시 ORDER BY 생략 가능합니다:AVG·CORR·CORR_SPEARMAN·COUNT·MAX·MEDIAN·MIN·PERCENTILE_CONT·PERCENTILE_DISC·ROW_NUMBER·STDDEV·SUM·VAR14-8. 실전 예시
-- 테스트 테이블 생성 CREATE TABLE myTable (Class CHAR(10), Value INT, Offset INT); INSERT INTO myTable VALUES('A', 1, 1); INSERT INTO myTable VALUES('A', 3, 3); INSERT INTO myTable VALUES('A', 5, NULL); INSERT INTO myTable VALUES('A', 5, 2); INSERT INTO myTable VALUES('A', 10, 0); INSERT INTO myTable VALUES('B', 1, 3); INSERT INTO myTable VALUES('B', 1, 1); INSERT INTO myTable VALUES('B', 7, 1); -- ROW_NUMBER / RANK / DENSE_RANK 비교 SELECT Class, Value, ROW_NUMBER() OVER (PARTITION BY Class ORDER BY Value) AS ROW_NUM, RANK() OVER (PARTITION BY Class ORDER BY Value) AS RANK, DENSE_RANK() OVER (PARTITION BY Class ORDER BY Value) AS DENSE_RANK FROM myTable;Class Value ROW_NUM RANK DENSE_RANK A 1 1 1 1 A 3 2 2 2 A 5 3 3 3 A 5 4 3 3 A 10 5 5 4 B 1 1 1 1 B 1 2 1 1 B 7 3 3 2 -- LAG / LEAD: 전·후 행 값 비교 SELECT Class, Value, LAG(Value, 1, 0) OVER (PARTITION BY Class ORDER BY Value) AS PREV_VAL, LEAD(Value, 1, 0) OVER (PARTITION BY Class ORDER BY Value) AS NEXT_VAL FROM myTable; -- 누적 합계 (Running Sum) SELECT Class, Value, SUM(Value) OVER (PARTITION BY Class ORDER BY Value ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS RUNNING_SUM FROM myTable; -- 이동 평균 (3행 슬라이딩 윈도우) SELECT Class, Value, AVG(Value) OVER (PARTITION BY Class ORDER BY Value ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS MOVING_AVG_3 FROM myTable;
📌 AMDP 개발자를 위한 핵심 함수 빠른 참조
목적 함수 비고 클라이언트 읽기 SESSION_CONTEXT('CLIENT')AMDP 필수 패턴 NULL 처리 COALESCE,IFNULLNULLIF로 역변환 날짜 가감 ADD_DAYS,ADD_MONTHS음수로 뺄셈 날짜 차이 DAYS_BETWEEN,MONTHS_BETWEEN문자열 패딩 LPAD(s, 18, '0')자재번호 등 고정 길이 문자열 연결 CONCAT/||CONCAT_NAZ는 NULL 안전 부분 문자열 SUBSTRING,LEFT,RIGHT문자열 검색 LOCATE없으면 0 반환 타입 변환 CAST,TO_VARCHARTO_DATS: YYYYMMDD 형식 0 나누기 방지 NDIV0(n, d)d=0이면 0 반환 순위 ROW_NUMBER,RANK,DENSE_RANKOVER(PARTITION BY) 이전/다음 행 LAG,LEAD누적 집계 SUM/AVG OVER(...)Window Frame 주의 JSON 추출 JSON_VALUE,JSON_QUERYSQL Injection 방지 ESCAPE_SINGLE_QUOTESEXECUTE IMMEDIATE 사용 시 'SAP' 카테고리의 다른 글
Oracle Hierarchy → SAP HANA SQLScript 변환 가이드 (0) 2026.05.26 ABAP RAP + AMDP 정리 (0) 2026.05.25 SAP CDS VDM 관련 어노테이션 정리 (0) 2026.05.20 CDS Table Function — implementedBy 메서드명 추출 (0) 2026.05.19 New ABAP 유용한 구문 정리 (0) 2026.05.15