본문 바로가기
ABAP 문법 & 기법

[SAP ABAP] 문자열 비교 연산자 8가지 — CP / CA / CO / CN / CS / NA / NS / NP 차이 (유효성 검사)

by Song.sh 2026. 5. 14.

ABAP 프로그래밍을 하다 보면 문자열의 패턴·포함·구성을 검사 해야 하는 순간이 자주 옵니다. 사용자가 입력한 자재 코드가 정해진 형식인지, 어떤 식별자에 특정 문자가 들어 있는지, 입력값에 허용되지 않는 글자가 섞여 있지는 않은지 등. 정규식까지 갈 일은 아니고, 단순 비교 한 줄로 끝내고 싶은 경우.

 

이때 사용하는 게 ABAP의 문자열 비교 연산자 8종CP · NP · CA · NA · CO · CN · CS · NS. 두 글자 단축어라 외우기 어려워 보이지만, 실제로는 Contains / NoPattern / Any / Only / String 의 조합일 뿐.

 

이 글은 8가지 연산자의 의미·차이·헷갈리기 쉬운 케이스 를 한 번에 정리한 메모입니다. 셀렉션 화면 유효성 체크, 사용자 입력 검증, 데이터 분류 분기에 그대로 활용할 수 있습니다.


핵심 원리

연산자 이름은 영문 약자입니다. 의미를 단어로 풀어보면 패턴이 보입니다.

연산자 풀어쓰기 의미
CP Contains Pattern 와일드카드(*, +) 패턴이 맞으면 TRUE
NP No Pattern 패턴이 맞지 않으면 TRUE (CP 의 반대)
CA Contains Any 상대편 글자 중 하나 이상 포함되면 TRUE
NA No Any 상대편 글자가 하나도 없으면 TRUE (CA 의 반대)
CO Contains Only 왼쪽이 상대편 글자들로만 구성되어 있으면 TRUE
CN Contains Not only 상대편 글자 외에 다른 글자가 섞여 있으면 TRUE (CO 의 반대)
CS Contains String 상대편 문자열을 부분 문자열 로 포함하면 TRUE
NS No String 상대편 문자열을 부분 문자열로 포함하지 않으면 TRUE (CS 의 반대)

그룹별로 보면 더 쉽습니다.

그룹 긍정 / 부정 비교 단위
패턴 매칭 CP / NP 와일드카드 패턴 (* 임의 길이, + 1글자)
글자 집합 CA / NA / CO / CN 상대편을 글자 집합(letter set) 으로 취급
문자열 포함 CS / NS 상대편을 연속된 부분 문자열 로 검색

이렇게 묶고 보면 외울 것은 그룹 3개 × 긍정/부정 2개 = 6개 패턴 입니다.


1단계 — 변수와 예시 데이터 준비

연산자 동작을 비교하기 위해 5개 문자열을 미리 잡아둡니다.

DATA: str1 TYPE string,
      str2 TYPE string,
      str3 TYPE string,
      str4 TYPE string,
      str5 TYPE string.

str1 = 'ABCDEFGH'.       " 기준 문자열
str2 = '*C*F*H'.          " 와일드카드 패턴
str3 = 'ABCDEFGHIJ'.      " 글자 집합 (str1 글자 모두 포함 + I/J 추가)
str4 = 'ABCDEFGH'.        " str1 과 동일
str5 = 'K*Y+U'.           " 와일드카드 + 일반 글자 섞임

이 다섯 변수로 8개 연산자를 차례로 비교해 봅니다.


2단계 — 패턴 매칭 (CP / NP)

CP·NP 는 SAP 와일드카드를 인식하는 패턴 매칭.

와일드카드 의미
* 임의 길이의 임의 문자열 (0글자 이상)
+ 정확히 1글자 (모든 글자 허용)
" CP: str1 이 str2 패턴에 맞으면 TRUE
IF str1 CP str2.    " 'ABCDEFGH' CP '*C*F*H'  → 매칭 성공
  MESSAGE '찾음' TYPE 'I'.
ENDIF.

" NP: str1 이 str5 패턴에 맞지 않으면 TRUE
IF str1 NP str5.    " 'ABCDEFGH' NP 'K*Y+U'   → 매칭 실패 = NP TRUE
  MESSAGE 'NP 성공' TYPE 'I'.
ENDIF.

설명: 'CF*H' 는 "임의 + C + 임의 + F + 임의 + H" 라는 패턴. 'ABCDEFGH' 가 이 패턴에 정확히 맞으므로 CP 성공.


3단계 — 글자 집합 매칭 (CA / NA / CO / CN)

이 4개는 상대편을 글자 집합으로 취급 하는 게 핵심입니다. 'ABCDEFGHIJ' 는 "A·B·C·D·E·F·G·H·I·J 글자 집합" 으로 해석됩니다(순서·연속성 X).

CA — Contains Any

" CA: str1 안에 str3 의 글자 중 하나라도 들어 있으면 TRUE
IF str1 CA str3.    " 'ABCDEFGH' 안에 A,B,C,...,J 중 하나라도 있음 → TRUE
  MESSAGE 'CA 성공' TYPE 'I'.
ENDIF.

NA — No Any

" NA: str1 안에 str3 의 글자가 하나도 없으면 TRUE
" str1='ABCDEFGH' 에 str3='ABCDEFGHIJ' 의 글자가 모두 있으니 NA → FALSE

CO — Contains Only

" CO: str1 이 str3 의 글자들로만 구성되어 있으면 TRUE
IF str1 CO str3.    " 'ABCDEFGH' 는 모두 'ABCDEFGHIJ' 안에 속함 → TRUE
  MESSAGE 'CO 성공' TYPE 'I'.
ENDIF.

CO 는 "왼쪽이 오른쪽 집합 안에 모두 포함되는가" 의 의미입니다. 사용자 입력이 허용된 글자 집합 안에 있는지 검증할 때 유용.

CN — Contains Not only

" CN: str1 안에 str3 외에 다른 글자가 섞여 있으면 TRUE
" str1='ABCDEFGH' 는 'ABCDEFGHIJ' 외 다른 글자가 없으니 CN → FALSE

4단계 — 문자열 포함 매칭 (CS / NS)

CS·NS 는 글자 집합이 아니라 연속된 부분 문자열 로 검색합니다.

" CS: str1 안에 str3 가 연속된 부분 문자열로 들어 있으면 TRUE
" str1='ABCDEFGH', str3='ABCDEFGHIJ' → str3 가 str1 보다 길어서 못 들어감 → FALSE

" CS 가 TRUE 가 되려면 str4 같은 더 짧은 부분 문자열 필요
IF str1 CS 'CDE'.   " 'ABCDEFGH' 안에 'CDE' 연속 포함 → TRUE
  MESSAGE 'CS 성공' TYPE 'I'.
ENDIF.

" NS: str1 안에 str4 의 값이 (연속 문자열로) 포함되지 않으면 TRUE
IF str1 NS str4.    " 'ABCDEFGH' 안에 'ABCDEFGH' 가 포함됨 → NS FALSE
                    " (자기 자신 포함은 CS = TRUE)
ENDIF.

CS·NS 는 대소문자 구분 안 함이 기본이라, "abcdefgh CS CDE" 도 TRUE 입니다(이 부분은 SAP 버전에 따라 차이 있을 수 있음 — 후술).


활용 시나리오 — 유효성 체크

이 연산자들의 진짜 가치는 사용자 입력 유효성 검증 입니다.

검증 시나리오 연산자
숫자만 입력했는지 IF input CO '0123456789'
알파벳·숫자만 허용 IF input CO 'ABC...XYZ0123456789'
특수문자가 섞여 있는지 IF input CA '!@#$%^&*'
자재 코드가 특정 패턴 형식인지 IF matnr CP 'Z*' (Z로 시작)
파일명이 특정 확장자인지 IF filename CP '*.xlsx'
메시지에 특정 키워드 포함 IF text CS '오류'

특히 COCA 는 정규식 없이도 화이트리스트·블랙리스트 검증을 한 줄로 끝낼 수 있어 매우 강력합니다.


흔히 빠뜨리는 함정

CS 와 CA 혼동

가장 흔한 함정. 'ABC' CS 'BC' → TRUE (연속 부분 문자열). 'ABC' CA 'BC' → TRUE (B 또는 C 가 들어 있음). 의미가 다른데 둘 다 TRUE 가 나와서 헷갈리기 쉬움.

CO 의 빈 문자열 처리

'' CO 'ABC' → TRUE. 왼쪽이 비어 있으면 "오른쪽 집합 안에 모두 포함된다"는 조건이 자동 성립. 입력 비어 있는 케이스 별도 분기 필요.

패턴 와일드카드 vs SQL 와일드카드 차이

ABAP 비교 연산자는 *·+ 사용. SQL LIKE%·_ 와 다름. SELECT 에서는 LIKE '%X%', ABAP 비교에서는 CP 'X'.

후행 공백 처리

문자열 비교 연산자는 TYPE C 의 후행 공백을 무시하는 게 기본. TYPE STRING 은 그대로 비교. 두 타입을 섞어 비교할 때 의도와 다른 결과가 나올 수 있음.

CP 의 SY-FDPOS 부수 효과

CS·CA·CP 가 성공하면 SY-FDPOS 에 매칭 시작 위치가 채워짐. 이 값을 SUBSTRING 으로 활용할 수도 있음 — 의도하지 않은 부수 효과로 활용도 가능.

대소문자 구분 — SAP 버전별 차이

CP·CS 등 일부 연산자는 SAP 버전·환경에 따라 대소문자 처리 기본값이 다를 수 있음. 명확히 하고 싶으면 입력 측을 TRANSLATE ... TO UPPER CASE 로 통일 후 비교.

한글 처리

한글 문자열에 대해 CO '0123456789' 같이 ASCII 집합으로 검사하면 "한글이 섞여 있는지" 판단 가능. 활용 예: 한글 자동 감지.

부정 연산자 NA/NP/CN/NS 의 빈 문자열

빈 문자열은 부정 연산자들에서 TRUE 가 되는 경우가 많음(아무것도 없으니 "아무것도 포함하지 않는다"는 조건이 성립). 빈 문자열 케이스를 별도 가드로 처리.


전체 코드 — 복사용 통합본

위 단계를 하나의 ABAP 프로그램으로 합친 통합본입니다. SE38에 그대로 복사해서 활성화하면 동작합니다.

REPORT zexample_string_operators.

DATA: str1 TYPE string,
      str2 TYPE string,
      str3 TYPE string,
      str4 TYPE string,
      str5 TYPE string.

* 1) 예시 데이터 -----------------------------------------------------
str1 = 'ABCDEFGH'.       " 기준 문자열
str2 = '*C*F*H'.          " 와일드카드 패턴
str3 = 'ABCDEFGHIJ'.      " 글자 집합 (str1 글자 모두 + I/J)
str4 = 'ABCDEFGH'.        " str1 과 동일
str5 = 'K*Y+U'.           " 와일드카드 + 일반 글자

* 2) 패턴 매칭 — CP / NP --------------------------------------------
IF str1 CP str2.
  WRITE: / 'CP 성공: 패턴에 맞음'.
ENDIF.

IF str1 NP str5.
  WRITE: / 'NP 성공: 패턴에 안 맞음'.
ENDIF.

* 3) 글자 집합 매칭 — CA / NA / CO / CN -----------------------------
IF str1 CA str3.
  WRITE: / 'CA 성공: 하나 이상 포함'.
ENDIF.

IF str1 CO str3.
  WRITE: / 'CO 성공: 모두 str3 집합 안에 속함'.
ENDIF.

* (str1 안에 str3 의 글자가 모두 있으니 NA / CN 은 FALSE — 출력 안 됨)

* 4) 문자열 포함 매칭 — CS / NS -------------------------------------
IF str1 CS 'CDE'.
  WRITE: / 'CS 성공: 부분 문자열 포함'.
ENDIF.

IF str1 NS 'XYZ'.
  WRITE: / 'NS 성공: 해당 부분 문자열 없음'.
ENDIF.

* 5) ★ 실전 응용: 유효성 검사 ----------------------------------------
DATA(lv_input) = '12345ABC'.

IF lv_input CO '0123456789'.
  WRITE: / '숫자만 입력됨'.
ELSE.
  WRITE: / '숫자 외 글자 섞임'.
ENDIF.

IF lv_input CA '!@#$%^&*'.
  WRITE: / '경고: 특수문자 포함'.
ENDIF.

IF lv_input CP 'Z*'.
  WRITE: / 'Z로 시작하는 식별자'.
ENDIF.

* ※ 참고:
*   - CP 의 와일드카드: '*' = 임의 길이, '+' = 1글자
*   - 매칭 성공 시 SY-FDPOS 에 시작 위치 저장됨 (부수 효과)
*   - 대소문자 구분은 SAP 버전·옵션에 따라 다를 수 있음

요약

상황 연산자
형식 패턴 검증 CP / NP (와일드카드 *·+)
허용 글자만 사용했나 CO (Contains Only)
금지 글자가 있나 CA (Contains Any) — 블랙리스트 검증
이외의 글자가 섞였나 CN (Contains Not only)
특정 단어 포함 CS (Contains String) — 연속 부분 문자열
특정 단어 없음 NS (No String)
아무 글자도 없는지 NA (No Any) — 화이트리스트 외부 검증

ABAP 문자열 비교 연산자는 정규식까지 갈 필요 없는 가벼운 검증에 매우 강력합니다. 8개를 외우려 하지 말고 3그룹(패턴/글자집합/문자열) × 긍정·부정 으로 묶어두면 머릿속에 자연스럽게 정리됩니다. 셀렉션 화면 유효성 체크·BAPI 입력 검증·메시지 분류·식별자 패턴 분기 등 사용자 입력이 들어오는 거의 모든 지점에서 한 줄로 깔끔하게 끝낼 수 있습니다.


Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다. CP / CA / CO 등 비교 연산자의 대소문자 처리·후행 공백 처리는 SAP 버전 및 데이터 타입(C vs STRING) 에 따라 다를 수 있습니다. 운영 환경 적용 전 개발 시스템에서 실제 데이터로 비교 결과를 검증하시기 바랍니다.