문자열 함수와 연산자

문자열 함수와 연산자 (String functions and operators)

이 문서는 Trino의 문자열 함수와 연산자를 설명합니다. 문자열 연결, 패턴 매칭, 변환, 유니코드 처리 등 다양한 문자열 조작 기능을 배울 수 있어요.

출처: 문서

본문

문자열 연산자 (String operators)

|| 연산자는 연결(concatenation)을 수행합니다.

LIKE 문은 패턴 매칭에 사용할 수 있으며, "패턴 비교: LIKE" 문서에 설명되어 있습니다.

문자열 함수 (String functions)

이 함수들은 입력 문자열이 유효한 UTF-8로 인코딩된 유니코드 코드 포인트를 포함한다고 가정합니다. 유효한 UTF-8에 대한 명시적 검사는 없으며, 유효하지 않은 UTF-8에서 함수가 잘못된 결과를 반환할 수 있습니다. 유효하지 않은 UTF-8 데이터는 from_utf8()로 수정할 수 있습니다.

또한 함수는 사용자에게 보이는 문자(또는 그래핌 클러스터)가 아니라 유니코드 코드 포인트에 대해 동작합니다. 일부 언어는 여러 코드 포인트를 하나의 사용자 인지 문자로 결합하지만, 함수는 각 코드 포인트를 별도의 단위로 취급합니다.

lower()upper() 함수는 일부 언어에 필요한 로케일 민감, 문맥 민감, 또는 일대다 매핑을 수행하지 않습니다. 특히 리투아니아어, 터키어, 아제리어에 대해서는 잘못된 결과를 반환합니다.

chr(n) → varchar

유니코드 코드 포인트 n을 단일 문자 문자열로 반환합니다.

codepoint(string) → integer

string의 유일한 문자의 유니코드 코드 포인트를 반환합니다.

concat(string1, ..., stringN) → varchar

string1, string2, ..., stringN의 연결을 반환합니다. 이 함수는 SQL 표준 연결 연산자(||)와 같은 기능을 제공합니다.

concat_ws(separator, string1, ..., stringN) → varchar

separator로 값을 이어 string1, string2, ..., stringN의 연결을 반환합니다. separator가 null이면 반환값도 null입니다. separator 뒤의 인수 중 null 값은 건너뜁니다.

concat_ws(string0, array(varchar)) → varchar

string0을 구분자로 배열의 요소를 연결해 반환합니다. string0이 null이면 반환값도 null입니다. 배열의 null 값은 건너뜁니다.

ends_with(string, substring) → boolean

substringstring의 접미사인지 검사합니다.

format(format, args...) → varchar

format() (conversion 문서)을 참고하세요.

hamming_distance(string1, string2) → bigint

string1string2의 해밍 거리를 반환합니다. 즉 대응하는 문자가 서로 다른 위치의 수입니다. 두 문자열의 길이는 같아야 합니다.

length(string) → bigint

string의 길이를 문자 수로 반환합니다.

levenshtein_distance(string1, string2) → bigint

string1string2의 레벤슈타인 편집 거리를 반환합니다. 즉 string1string2로 바꾸는 데 필요한 최소 단일 문자 편집(삽입, 삭제, 치환) 횟수입니다.

lower(string) → varchar

string을 소문자로 변환합니다.

lpad(string, size, padstring) → varchar

stringpadstring으로 size 문자까지 왼쪽 패딩합니다. sizestring의 길이보다 작으면 결과는 size 문자로 잘립니다. size는 음수이면 안 되고 padstring은 비어 있으면 안 됩니다.

ltrim(string) → varchar

string의 앞쪽 공백을 제거합니다.

luhn_check(string) → boolean

숫자 문자열이 Luhn 알고리즘에 따라 유효한지 검사합니다.

이 체크섬 함수는 modulo 10 또는 mod 10이라고도 하며, 신용카드 번호와 정부 식별 번호에 널리 적용되어 잘못 입력된 숫자와 유효한 숫자를 구별합니다.

유효한 식별 번호:

select luhn_check('79927398713');
-- true

유효하지 않은 식별 번호:

select luhn_check('79927398714');
-- false

overlay(string PLACING replacement FROM start) → varchar

string에서 위치 start(1부터 시작, 0보다 커야 함)에서 시작하는 부분 문자열을 replacement로 바꾼 값을 반환합니다. 제거되는 문자 수는 기본적으로 replacement의 길이입니다. 결과는 바뀐 범위가 string 안에 완전히 있을 때만 string과 같은 길이를 유지합니다. 범위가 끝을 넘어가면 결과가 더 길어집니다. 예를 들어 overlay('abc' PLACING 'XYZ' FROM 3)abXYZ를 반환합니다.

overlay(string PLACING replacement FROM start FOR length) → varchar

string에서 위치 start(1부터 시작, 0보다 커야 함)에서 시작하는 length 문자를 replacement로 바꾼 값을 반환합니다. length0 이하이면 문자를 제거하지 않고 replacement를 삽입합니다. 예를 들어:

SELECT overlay('Txxxxas' PLACING 'hom' FROM 2 FOR 4);
-- Thomas

position(substring IN string) → bigint

string에서 substring의 첫 번째 인스턴스 시작 위치를 반환합니다. 위치는 1부터 시작합니다. 찾지 못하면 0을 반환합니다.

이 SQL 표준 함수는 특별한 문법을 가지며 인수에 IN 키워드를 사용합니다. strpos()도 참고하세요.

replace(string, search) → varchar

string에서 모든 search 인스턴스를 제거합니다.

replace(string, search, replace) → varchar

string에서 모든 search 인스턴스를 replace로 바꿉니다.

reverse(string) → varchar

string의 문자를 역순으로 반환합니다.

rpad(string, size, padstring) → varchar

stringpadstring으로 size 문자까지 오른쪽 패딩합니다. sizestring의 길이보다 작으면 결과는 size 문자로 잘립니다. size는 음수이면 안 되고 padstring은 비어 있으면 안 됩니다.

rtrim(string) → varchar

string의 뒤쪽 공백을 제거합니다.

soundex(char) → string

char의 음성 표현을 담은 문자 문자열을 반환합니다. 두 표현식의 음성 유사성, 즉 문자열이 말할 때 어떻게 들리는지를 평가하는 데 일반적으로 사용됩니다:

SELECT name
FROM nation
WHERE SOUNDEX(name)  = SOUNDEX('CHYNA');

 name  |
-------+----
 CHINA |
(1 row)

split(string, delimiter)

stringdelimiter로 분할해 배열을 반환합니다.

split(string, delimiter, limit)

stringdelimiter로 분할해 최대 limit 크기의 배열을 반환합니다. 배열의 마지막 요소는 항상 string에 남은 모든 것을 포함합니다. limit는 양수여야 합니다.

split_part(string, delimiter, index) → varchar

stringdelimiter로 분할해 index 필드를 반환합니다. 필드 인덱스는 1부터 시작합니다. 인덱스가 필드 수보다 크면 null을 반환합니다.

split_to_map(string, entryDelimiter, keyValueDelimiter) → map<varchar, varchar>

stringentryDelimiterkeyValueDelimiter로 분할해 맵을 반환합니다. entryDelimiterstring을 키-값 쌍으로 분할하고, keyValueDelimiter는 각 쌍을 키와 값으로 분할합니다.

split_to_multimap(string, entryDelimiter, keyValueDelimiter)

stringentryDelimiterkeyValueDelimiter로 분할해 각 고유 키에 대한 값 배열을 담은 맵을 반환합니다. entryDelimiterstring을 키-값 쌍으로 분할하고, keyValueDelimiter는 각 쌍을 키와 값으로 분할합니다. 각 키의 값은 string에 나타난 순서와 같습니다.

strpos(string, substring) → bigint

string에서 substring의 첫 번째 인스턴스 시작 위치를 반환합니다. 위치는 1부터 시작합니다. 찾지 못하면 0을 반환합니다.

strpos(string, substring, instance) → bigint

string에서 substring의 N번째 instance의 위치를 반환합니다. instance가 음수이면 string의 끝에서부터 검색을 시작합니다. 위치는 1부터 시작합니다. 찾지 못하면 0을 반환합니다.

starts_with(string, substring) → boolean

substringstring의 접두사인지 검사합니다.

substr(string, start) → varchar

substring()의 별칭입니다.

substring(string, start) → varchar

시작 위치 start부터 string의 나머지를 반환합니다. 위치는 1부터 시작합니다. 음수 시작 위치는 문자열의 끝을 기준으로 해석됩니다.

substr(string, start, length) → varchar

substring()의 별칭입니다.

substring(string, start, length) → varchar

시작 위치 start부터 길이 lengthstring 부분 문자열을 반환합니다. 위치는 1부터 시작합니다. 음수 시작 위치는 문자열의 끝을 기준으로 해석됩니다.

title_case(string) → varchar

각 단어의 첫 글자를 대문자로, 나머지 글자를 소문자로 변환한 string을 반환합니다. 단어는 영숫자가 아닌 문자로 구분됩니다. 예를 들어 SELECT title_case('hello world')'Hello World'를 반환합니다.

translate(source, from, to) → varchar

from 문자열에서 찾은 문자를 to 문자열의 대응 문자로 바꿔 source 문자열을 변환해 반환합니다. from 문자열에 중복이 있으면 처음 것만 사용합니다. source 문자가 from 문자열에 없으면 source 문자는 변환 없이 복사됩니다. from 문자열에서 일치하는 문자의 인덱스가 to 문자열의 길이를 넘으면 source 문자는 결과 문자열에서 생략됩니다.

translate 함수를 설명하는 몇 가지 예제:

SELECT translate('abcd', '', ''); -- 'abcd'
SELECT translate('abcd', 'a', 'z'); -- 'zbcd'
SELECT translate('abcda', 'a', 'z'); -- 'zbcdz'
SELECT translate('Palhoça', 'ç','c'); -- 'Palhoca'
SELECT translate('abcd', 'b', U&'\+01F600'); -- a😀cd
SELECT translate('abcd', 'a', ''); -- 'bcd'
SELECT translate('abcd', 'a', 'zy'); -- 'zbcd'
SELECT translate('abcd', 'ac', 'z'); -- 'zbd'
SELECT translate('abcd', 'aac', 'zq'); -- 'zbd'

trim(string) → varchar

string의 앞뒤 공백을 제거합니다.

trim([ [ specification ] [ string ] FROM ] source) → varchar

source에서 string까지(포함) 지정된 앞/뒤 문자를 제거합니다:

SELECT trim('!' FROM '!foo!'); -- 'foo'
SELECT trim(LEADING FROM '  abcd');  -- 'abcd'
SELECT trim(BOTH '$' FROM '$var$'); -- 'var'
SELECT trim(TRAILING 'ER' FROM upper('worker')); -- 'WORK'

upper(string) → varchar

string을 대문자로 변환합니다.

word_stem(word) → varchar

영어로 word의 어간을 반환합니다.

word_stem(word, lang) → varchar

lang 언어로 word의 어간을 반환합니다.

유니코드 함수 (Unicode functions)

normalize(string) → varchar

string을 NFC 정규화 형태로 변환합니다.

normalize(string, form) → varchar

string을 지정된 정규화 형태로 변환합니다. form은 다음 키워드 중 하나여야 합니다:

형태 설명
NFD 정규 분해 (Canonical Decomposition)
NFC 정규 분해 후 정규 합성
NFKD 호환 분해 (Compatibility Decomposition)
NFKC 호환 분해 후 정규 합성

이 SQL 표준 함수는 특별한 문법을 가지며 form을 문자열이 아니라 키워드로 지정해야 합니다.

to_utf8(string) → varbinary

string을 UTF-8 varbinary 표현으로 인코딩합니다.

from_utf8(binary) → varchar

binary에서 UTF-8로 인코딩된 문자열을 디코딩합니다. 유효하지 않은 UTF-8 시퀀스는 유니코드 대체 문자 U+FFFD로 바뀝니다.

from_utf8(binary, replace) → varchar

binary에서 UTF-8로 인코딩된 문자열을 디코딩합니다. 유효하지 않은 UTF-8 시퀀스는 replace로 바뀝니다. 대체 문자열 replace는 단일 문자이거나 비어 있어야 합니다 (이 경우 유효하지 않은 문자가 제거됩니다).

더 알아보기 (Learn more)

문자열 함수와 함께 자주 쓰이는 정규 표현식 함수, 변환 함수도 살펴보세요. 특히 패턴 기반 문자열 처리가 필요하면 정규 표현식 문서를 확인해보세요.