ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 SPS07

    SAP HANA SQL Functions 완전 정리
    p.83 ~ p.430 · Section 4.9 SQL 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
    JSONJSON 데이터 반환 및 조작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_BIGINTConversion
    BIGINT로 변환
    TO_BIGINT(val)
    TO_DECIMALConversion
    DECIMAL(p,s)로 변환
    TO_DECIMAL(val [,p,s])
    TO_DOUBLEConversion
    DOUBLE 부동소수점으로 변환
    TO_DOUBLE(val)
    TO_DATEConversion
    DATE 타입으로 변환
    TO_DATE(val [, fmt])
    TO_TIMESTAMPConversion
    TIMESTAMP로 변환
    TO_TIMESTAMP(val [, fmt])
    TO_TIMEConversion
    TIME 타입으로 변환
    TO_TIME(val [, fmt])
    TO_SECONDDATEConversion
    SECONDDATE 타입으로 변환
    TO_SECONDDATE(val [, fmt])
    TO_DATSConversion
    ABAP DATS 형식으로 변환 (YYYYMMDD)
    TO_DATS(val)
    TO_ALPHANUMConversion
    ALPHANUM 타입으로 변환
    TO_ALPHANUM(val)
    TO_BLOB / TO_CLOB / TO_NCLOBConversion
    LOB 타입으로 변환
    TO_BLOB(val)
    TO_BINARYConversion
    BINARY 타입으로 변환
    TO_BINARY(val)
    TO_FIXEDCHARConversion
    CHAR 고정 길이 문자열로 변환
    TO_FIXEDCHAR(val, n)
    TO_JSON_BOOLEANConversion
    JSON Boolean으로 변환
    TO_JSON_BOOLEAN(val)
    TO_REALConversion
    REAL(4byte 부동소수)으로 변환
    TO_REAL(val)
    TO_SMALLDECIMALConversion
    SMALLDECIMAL로 변환
    TO_SMALLDECIMAL(val)
    TO_SMALLINTConversion
    SMALLINT로 변환
    TO_SMALLINT(val)
    TO_TINYINTConversion
    TINYINT(0~255)로 변환
    TO_TINYINT(val)
    TO_BOOLEANConversion
    BOOLEAN으로 변환
    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()TIMESTAMPCURRENT_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)INTEGER2024
    MONTH(date)INTEGER1 ~ 12
    DAYOFMONTH(date)INTEGER1 ~ 31
    DAYOFYEAR(date)INTEGER1 ~ 366
    DAYNAME(date)VARCHAR'Monday' ~ 'Sunday'
    MONTHNAME(date)VARCHAR'January' ~ 'December'
    QUARTER(date)INTEGER1 ~ 4
    WEEK(date)INTEGER1 ~ 53
    WEEKDAY(date)INTEGER0(월) ~ 6(일)
    ISOWEEK(date)VARCHAR'2024.03' (ISO 주차)
    HOUR(time)INTEGER0 ~ 23
    MINUTE(time)INTEGER0 ~ 59
    SECOND(time)INTEGER0 ~ 59
    EXTRACT(part FROM date)INTEGEREXTRACT(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

    트리·방향 그래프 형태의 계층 데이터 처리 함수입니다. 세 가지 유형으로 나뉩니다.

    유형함수설명
    GeneratorHIERARCHY기본 계층 구조 생성
    HIERARCHY_LEVELED레벨 기반 계층 생성
    HIERARCHY_SPANTREE신장 트리(Spanning Tree) 생성
    HIERARCHY_TEMPORAL시간 기반 계층 생성
    NavigationHIERARCHY_ANCESTORS조상(부모 이상) 노드 탐색
    HIERARCHY_ANCESTORS_AGGREGATE조상 노드 집계
    HIERARCHY_DESCENDANTS자손(자식 이하) 노드 탐색
    HIERARCHY_DESCENDANTS_AGGREGATE자손 노드 집계
    HIERARCHY_SIBLINGS형제 노드 탐색
    ScalarHIERARCHY_COMPOSITE_ID계층 복합 ID 생성
    💡 계층 함수의 전체 문서는 SAP HANA Hierarchy Developer Guide를 참조하십시오. AMDP에서는 주로 BOM(Bill of Materials) 전개, 조직도 등에 활용됩니다.

    8. JSON Functions p.422

    함수문법설명
    JSON_VALUE JSON_VALUE(json_str, path) JSON 문자열에서 경로로 스칼라 값 추출
    JSON_QUERY JSON_QUERY(json_str, path) JSON 객체·배열 추출 (객체/배열 반환)
    JSON_TABLE JSON_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

    시스템 값 반환, NULL 처리, 통화·단위 변환 등 다목적 함수 모음입니다.

    9-1. NULL 처리

    함수문법설명
    COALESCE COALESCE(expr1, expr2, ...) 첫 번째 non-NULL 값 반환. 최소 2개 이상의 인자 필요.
    IFNULL IFNULL(expr1, expr2) expr1이 NULL이면 expr2 반환. COALESCE(e1,e2)와 동일.
    NULLIF NULLIF(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_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 · VAR

    14-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;
    ClassValueROW_NUMRANKDENSE_RANK
    A1111
    A3222
    A5333
    A5433
    A10554
    B1111
    B1211
    B7332
    -- 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_QUERY
    SQL Injection 방지ESCAPE_SINGLE_QUOTESEXECUTE IMMEDIATE 사용 시
    #SAP_HANA #SQLScript #AMDP #SQL_Functions #Window_Functions #String_Functions #Datetime_Functions #Aggregate_Functions #ABAP #S4HANA #SAP_Platform_2.0_SPS07
Designed by Tistory.