초급 Part03 : Xplenty에서 자주 수행되는 문자열 조작

이 가이드에서는 Xplenty에서 자주 수행되는 문자열 변환 처리에 대해 설명합니다.
※1 이후에도 새로운 케이스가 있으면, 이 가이드에 수시로 추가해 갈 예정입니다.
※2 일본어 페이지의 번역이므로 한국 사용자 환경에 맞지 않는 예가 있음을 감안하고 읽으시기 바랍니다.

자주 사용되는 문자열 조작

Q1. 성명을 성(Last Name)과 이름(First Name)으로 나누는 방법?

STRSPLIT 함수를 사용하면 구분 기호를 지정하고 문자열을 분할하여 검색할 수 있습니다.

field1='대한민국 만세'
STRSPLIT(field1,' ').$0
	==> 대한민국
STRSPLIT(field1,' ').$1
	==> 만세

Q2. 값이 한글인 경우에만 취득하는 방법?

REGEX_EXTRACT 함수를 사용하면 정규식을 사용하여 한글을 포함하는 문자열을 검색할 수 있습니다.

field1='한글 문자열'
REGEX_EXTRACT(field1,'[가-힣 ]+',0)
예: field1: 한글 문자열 ==> 한글 문자열 예: field1: abcd123 ==> null

Q3. 주소를 나누는 방법?

Xplenty에서는 완전히 실현하기는 어렵지만, 다음과 같은 방법으로 번지 부분을 나눌 수 있습니다.Xplenty에서는 정규식을 사용하여 조건과 일치하는 부분만 검색할 수 있습니다.

1. 都道府県(도도부현) 부분을 취득하려면

REGEX_EXTRACT 함수를 사용하고 정규식을 사용하여 조건과 일치하는 부분을 추출합니다.

field1='東京都港区六本木6-10-1'
REGEX_EXTRACT(field1,'(..都|..府|..道|([\\u4E00-\\u9FFF]{2,3})*県)',0)
	==> 東京都

2. 그 이외의 부분을 취득

INDEXOF 함수를 사용하면 조건과 일치하는 문자열의 위치를 결정할 수 있습니다

field1='東京都港区六本木6-10-1'
field10='東京都'
SUBSTRING(field1,INDEXOF(field1,field10)+Length(field10),Length(field3))
	==> 港区六本木6-10-1

Q4. Replace 함수

1. 일반문자열의 치환

field1='대구특별시'
REPLACE(field1,'특별','광역')
     ==> 대구광역시

2. 특정 문자 제외

문자열에 포함된 "?"와 같은 특수 문자를 대체하는 경우는 이스케이프 문자를 이용한다

# ?를 제외하고 싶은 경우는 \\\\? 를 사용 한다
field1='2022/?01/01'
REPLACE(field1,'\\\\?','')
     ==> '2022/01/01'

3. 개행 코드의 치환

웹 애플리케이션 데이터 등에 포함된 개행 코드를 DB에 저장할 때 개행 코드로 저장하는 방법?

# <BR>부분을 Replace함수를 사용하여 DB에 설정된 문자 코드에 맞는 올바른 줄 바꿈 코드로 바꿉니다.
field1='당신을 사랑합니다.<BR>그리고, 당신을 미워합니다.' REPLACE(field1,'<BR>','\\r\\n')
==> '당신을 사랑합니다.
그리고, 당신을 미워합니다.'

Q5. 반각 가타카나를 검출한다

CASE WHEN field1 MATCHES '.*[ヲ-゚].*' THEN 'Y' ELSE 'N' END

field1="あああアアあ" ==> Y
field1="ああああアあ" ==> N

Q6. NULL의 치환에 대해서

COALESCE 함수 또는 CASE 문으로 가능합니다.

  • Case 문 예:CASE WHEN field1 is null then '미설정' ELSE field1 END
  • COALESCE 함수의 예 : COALESCE(field1, '미설정')field1이 NULL 인 경우에만 두 번째 인수에 설정된 값 또는 열 (위의 예이면 "미설정")이 설정됩니다.

JSON 문자열 조작

Q1. JSON의 BAG 유형 데이터에서 중첩 값을 얻는 방법?

다음과 같은 [] - 대괄호 -로 복수의 값을 가지는 BAG형의 데이터를 Xplenty에서 다루는 방법을 소개합니다.

[
	{
		"key": "first_name",
		"value": "Taro",
		"label": "FIRST NAME"
},
	{
		"key": "last_name",
		"value": "Yamada",
		"label": "LAST NAME"
	},
	{
		"key": "gender",
		"value": "Male",
		"label": "GENDER",
		"is_required": "required",
		"datatype": "text"
	}
]

BAG 형의 데이터에서 필요한 값만 추출
중첩된 값으로부터 패스를 지정해 취득하려면, JsonExtractScalar 함수를 사용하는 것이 편리합니다.

FIRST NAME 가져오기: JsonExtractScalar(field_name,'$.[0].value’)   ==> Taro
LAST NAME 가져오기: JsonExtractScalar(field_name,'$.[1].value’) ==> Yamada
GENDER 가져오기: JsonExtractScalar(field_name,'$.[1].value’) ==> Male

고정 길이 문자열을 필드별로 분할하는 방법?

Select 컴포넌트로 다음과 같이 설정할 수 있습니다.
식: Substring(필드, 시작위치, 종료위치)
사용예:

SUBSTRING('aaaaa00000아아아아아11111',0,5)    ==> 'aaaaa'
SUBSTRING('aaaaa00000아아아아아11111',5,10) ==>  '00000'
SUBSTRING('aaaaa00000아아아아아11111',10,15) ==>  '아아아아아'

고정 길이 문자열을 생성하는 방법?

Select 컴포넌트로 다음과 같이 설정할 수 있습니다.
식: SPRINTF('%08d',수치)

수식 결과 설명
SPRINTF('%08d',1) '00000001' 8자리 (왼쪽을 자리수 분 0으로 채운다)
SPRINTF('%05d',10) '00010' 5자리 (왼쪽을 자리수 분 0으로 채운다)
SPRINTF('%5s','아') '____아' 5자리(왼쪽을 자리수 분 반각 스페이스로 채운다)
SPRINTF('%-10s','아') '아_________' 10자리(오른쪽을 자리수 분 반각 스페이스로 채운다)

예외 : "1" → "10000"와 같이 오른쪽에 0을 추가 할 수 없습니다. 숫자를 자릿수에 따라 10,100,1000 등을 곱하는 배수 처리가 필요합니다.
또한 예상 자릿수를 넘어가는 데이터가 들어오는 경우 CASE 문과 Length 함수, SUBSTRING 함수를 사용하여 초과 문자열을 잘라낼 수 있습니다.

5자리를 초과하는 경우의 제어 예:

CASE
    WHEN Length(field1) > 5 THEN SPRINTF('%-5s'(SUBSTRING(field1,0,5))
    ELSE SPRINTF('%-5s',field1)
END