반응형
해당 글에서는 데이터베이스 PostgreSQL을 기반으로 문자열 함수(String Function)에 대해 알아봅니다.
1) 문자열 함수(String Function)
💡 문자열 함수(String Function)
- 문자열을 조작하고 변환하는 데 사용되는 함수들을 의미합니다.
2) 문자열 함수 구조
💡 문자열 함수 구조는 일반적으로 'FUNCTION_NAME'과 '매개변수로 1개 이상의 값'의 형태로 구성되어 있습니다.
💡 문자열 함수 구조 설명
- FUNCTION_NAME : 사용할 문자열 함수의 이름입니다.
- arg1, arg2, …, argN: 함수에 전달할 값 또는 변수입니다.
FUNCTION_NAME(arg1, arg2, ..., argN)
3) 문자열 함수 종류 -1 : 기본
1. 문자열 함수 요약
기능 | 분류 | 리턴 값 | 설명 | 예시 |
ASCII | 값 변환 | number | 주어진 문자열의 첫 번째 문자의 ASCII 코드 값을 반환합니다. | ASCII('Hello') => 72 |
LENGTH | 값 반환 | number | 문자열의 문자 수를 반환합니다. | LENGTH('Hello') => 5 |
POSITION | 값 반환 | number | 문자열 내에서 지정된 부분 문자열의 위치를 반환합니다. | POSITION('world' IN 'Hello world') => 7 |
MD5 | 값 반환 | string | 주어진 문자열의 MD5 해시 값을 계산합니다. | MD5('Hello') => '8b1a9953c4611296a827abf8c47804d7' |
RIGHT | 값 반환 | string | 문자열의 끝에서 지정된 개수의 문자를 추출합니다. | RIGHT('Hello', 3) => 'llo' |
LEFT | 값 반환 | string | 문자열의 시작 부분에서 지정된 개수의 문자를 추출합니다. | LEFT('Hello', 3) => 'Hel' |
REGEXP_MATCHES | 값 반환 | array | 주어진 문자열 내에서 지정된 정규식 패턴과 일치하는 부분 문자열 집합을 반환합니다. | REGEXP_MATCHES('Hello world', 'wo..d') => ['worl'] |
REGEXP_REPLACE | 값 반환 | string | 주어진 문자열 내에서 지정된 정규식 패턴과 일치하는 부분 문자열을 새 문자열로 대체합니다. | REGEXP_REPLACE('Hello world', 'wo..d', 'goodbye') => 'Hello goodbye' |
LPAD | 문자열 변환 | string | 왼쪽에서 지정된 길이까지 지정된 문자로 문자열을 채웁니다. | LPAD('42', 5, '0') => '00042' |
CONCAT | 문자열 변환 | string | 두 개 이상의 문자열을 하나의 문자열로 연결합니다. | CONCAT('Hello', ' world') => 'Hello world' |
REPLACE | 문자열 조작 | string | 문자열 내에서 지정된 부분 문자열의 모든 발생을 새로운 부분 문자열로 대체합니다. | REPLACE('Hello world', 'world', 'universe') => 'Hello universe' |
TRIM | 문자열 조작 | string | 문자열의 시작 또는 끝에서 지정된 문자를 제거합니다. | TRIM(' Hello ') => 'Hello' |
FORMAT | 문자열 변환 | string | 지정된 형식 패턴에 따라 값을 서식화합니다. | FORMAT(1234.5678, '0.00') => '1234.57' |
CHR | 문자열 변환 | char | ASCII 코드 값을 문자로 변환합니다. | CHR(65) => 'A' |
SUBSTRING | 문자열 조작 | string | 지정된 위치에서 시작하여 지정된 개수의 문자로 문자열의 부분 문자열을 추출합니다. | SUBSTRING('Hello world', 7, 5) => 'world' |
TO_CHAR | 문자열 변환 | string | 숫자나 날짜를 지정된 형식을 사용하여 문자열로 변환합니다. | TO_CHAR(1234.5678, '9,999.99') => '1,234.57' |
TO_NUMBER | 문자열 변환 | number | 문자열을 숫자 값으로 변환합니다. | TO_NUMBER('123.45') => 123.45 |
SPLIT_PART | 문자열 조작 | string | 지정된 구분 기호를 기준으로 문자열을 여러 부분으로 나누고 지정된 부분을 반환합니다. | SPLIT_PART('apple,banana,orange', ',', 2) => 'banana' |
TRANSLATE | 문자열 반환 | string | 문자열 내의 일련의 문자를 다른 문자 집합으로 대체합니다. | TRANSLATE('Hello world', 'lo', 'xy') => 'Hexxy wyrd' |
2. ASCII() 함수
💡 ASCII
- 문자(char) 형태를 ‘ASCII 코드 값’을 반환하는 함수입니다.
- 해당 함수는 NUMBER 타입으로 값을 반환합니다.
💡 기본구조 인자
- char : 추출하려는 문자를 의미합니다.
-- 기본구조
ASCII(char)
-- 예시-1
SELECT ASCII('A') -- 65
-- 예시-2
SELECT ASCII('a') -- 97
[ 더 알아보기 ]
💡 매개변수로 ‘문자열’을 입력하면 어떻게 될까?
- 문자열의 ‘첫 번째’ 문자에 대한 ASCII 코드의 값을 반환합니다.
-- 예시-3
SELECT ASCII('ABC') -- 65
3. LENGTH() 함수
💡 LENGTH
- '문자열의 길이'를 반환하는 함수입니다.
- 해당 함수는 NUMBER 타입으로 값을 반환합니다.
💡 기본구조 인자
- string : 추출하려는 문자열을 의미합니다.
-- 기본구조
LENGTH(string);
-- 예시-1
SELECT LENGTH('Hello, world!'); -- 13
-- 예시-2
SELECT LENGTH (CAST(12345 AS TEXT)); -- 5
[ 더 알아보기 ]
💡 공백이나 NULL의 값에 대해서는 어떻게 처리를 하는가?
- 공백의 경우 ‘1’의 값을 가지며 NULL의 값인 경우 ‘NULL’의 값을 반환합니다.
-- 예시-3
SELECT LENGTH(' '); -- 1
-- 예시-4
SELECT LENGTH(NULL); -- NULL
4. POSITION() 함수
💡 POSITION
- 특정 부분 문자열이 다른 문자열 내에서 ‘처음으로 등장하는 위치’를 반환하는 함수입니다.
- 해당 함수는 NUMBER 타입으로 값을 반환합니다.
💡 기본구조 인자
- substring: 찾으려는 문자열을 의미합니다.
- string: 전체 문자열을 의미합니다.
-- 기본구조
POSITION(substring in string)
-- 예시-1
SELECT POSITION('llo' IN 'Hello, world!'); -- 3
[ 더 알아보기 ]
💡 대소문자를 구분을 하여 찾는가?
- 대소문자를 구분하여 동일한 문자열을 찾습니다.
💡 찾으려는 문자(substring)가 전체 문자(string) 내에 존재하지 않을 경우 무엇을 반환하는가?
- 값은 ‘0’을 반환합니다.
SELECT POSITION('tutorial' IN 'PostgreSQL Tutorial'); -- 0
5. MD5() 함수
💡 MD5
- 주어진 문자열의 'MD5 해시 값'을 반환하는 함수입니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본구조 인자
- string: 해시로 계산될 문자열을 의미합니다.
-- 기본구조
MD5(string)
-- 예시-1
SELECT MD5('PostgreSQL MD5'); -- f78fdb18bf39b23d42313edfaf7e0a44
[ 더 알아보기 ]
💡 MD5는 어떤 암호화 인가?
- 단방향 암호화 함수입니다. 즉, 주어진 문자열을 해시 값으로 변환하는 것은 가능하지만, 해시 값을 다시 원래 문자열로 복원하는 것은 거의 불가능합니다
6. RIGHT() 함수
💡 RIGHT
- 주어진 문자열에서 ‘오른쪽에서 지정된 개수’의 문자를 반환하는 함수입니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본구조 인자
- string: 가져올 문자열을 의미합니다
- n: 오른쪽 몇번째에서 가져올지를 의미합니다.
-- 기본구조
RIGHT(string, n)
-- 예시-1
SELECT RIGHT('XYZ', 1); -- Z
-- 예시-2
SELECT RIGHT('XYZ', 2); -- YZ
-- 예시-3
SELECT RIGHT('XYZ', - 1); -- YZ
7. LEFT() 함수
💡 LEFT
- 주어진 문자열에서 ‘왼쪽에서 지정된 개수’의 문자를 반환하는 함수입니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본구조 인자
- string: 가져올 문자열을 의미합니다
- n: 왼쪽 몇번째에서 가져올지를 의미합니다.
-- 기본구조
LEFT(string, n)
-- 예시-1
SELECT LEFT('ABC', 1); -- A
-- 예시-2
SELECT LEFT('ABC', 2); -- AB
-- 예시-3
SELECT LEFT('ABC', -2); -- A
8. REGEXP_MATCHES() 함수
💡 REGEXP_MATCHES
- 주어진 '정규 표현식에 매칭되는 부분 문자열'을 반환하는 함수입니다.
- 해당 함수는 array 타입으로 값을 반환합니다.
💡 기본구조 인자
- source_string: 전체 문자열을 의미합니다.
- pattern: 정규식 패턴을 의미합니다.
- flags: 함수의 동작을 제어합니다.
flags | 설명 |
i | 대소문자를 구분하지 않고 매칭합니다. |
g | 모든 매칭되는 결과를 반환합니다 |
-- 기본구조
REGEXP_MATCHES(source_string, pattern [, flags])
-- 예시-1 : #로 시작하고 영문자나 숫자로 시작하는 문자열을 찾습니다.
SELECT REGEXP_MATCHES('Learning #PostgreSQL #REGEXP_MATCHES', '#([A-Za-z0-9_]+)', 'g'); -- {PostgreSQL} {REGEX_MATCHES} (2 rows)
-- 예시-2
SELECT REGEXP_MATCHES('ABC', '^(A)(..)$', 'g'); -- {A,BC} (1 row)
9. REGEXP_REPLACE() 함수
💡 REGEXP_REPLACE
- 정규 표현식을 사용하여 문자열에서 '패턴'과 일치하는 부분을 '다른 문자열로 대체'하는 함수입니다.
💡 기본구조 인자
- source_string: 대체를 수행할 원본 문자열입니다.
- pattern: 대체할 패턴을 나타내는 정규 표현식입니다.
- replacement: 패턴과 일치하는 부분을 대체할 문자열입니다.
- flags (옵션): 정규 표현식의 동작을 제어하는 플래그입니다.
플래그 | 설명 |
'g' | 전역 일치(global match)를 수행합니다. 문자열 내에서 패턴과 일치하는 모든 부분을 대체합니다. |
'i' | 대소문자를 구분하지 않고 일치(case-insensitive match)를 수행합니다. |
'c' | 대소문자를 구분하여 일치(case-sensitive match)를 수행합니다. |
'm' | 여러 줄 일치(multiline match)를 수행합니다. 문자열이 여러 줄로 이루어져 있을 때, 각 줄에서 패턴과 일치하는 부분을 대체합니다. |
'n' | 패턴과 일치하는 부분을 대체하지 않고, 일치 여부만 확인합니다. |
-- 기본구조 인자
REGEXP_REPLACE(source_string, pattern, replacement, flags)
-- 예제-1
SELECT REGEXP_REPLACE('Hello123World456', '[0-9]', '', 'g'); --'HelloWorld'
-- 예제-2
SELECT REGEXP_REPLACE('ABC12345xyz','[[:digit:]]','','g'); --'ABCxyz'
10. LPAD() 함수
💡 LPAD
- 지정된 길이에 도달할 때까지 지정된 문자나 문자열로 문자열을 ‘왼쪽에서 채우는 기능’을 제공하는 함수입니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본구조 인자
- string: 왼쪽에서 채워질 원본 문자열입니다.
- length: 왼쪽 채움이 완료된 후 결과 문자열의 원하는 길이입니다
- fill: 왼쪽 채움에 사용될 문자나 문자열입니다.
-- 기본구조
LPAD(string, length[, fill])
-- 예제-1
SELECT LPAD('hello', 10, 'x'); -- 'xxxxxhello'
-- 예제-2
SELECT LPAD('PostgreSQL',15,'*'); -- '*****PostgreSQL'
11. CONCAT() 함수
💡 CONCAT
- 두 개 이상의 문자열을 결합하여 하나의 문자열로 만드는 기능을 제공하는 함수입니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본구조 인자
- string1, string2,... : 결합할 하나 이상의 문자열입니다.
-- 기본구조
CONCAT(str_1, str_2, ...)
-- 예제-1
SELECT CONCAT('Hello', ' ', 'World'); -- 'Hello World'
-- 예제-2
SELECT CONCAT('Hello', ' ', NULL); -- 'Hello '
[ 더 알아보기 ]
💡 CONCAT 함수 말고 ‘||’ 함수도 동일한 기능인가?
- 맞습니다. 아래와 같이 동일하게 두 개 이상의 문자열을 결합하여 하나의 문자열로 만듭니다.
-- 예제-1
SELECT 'Concatenation' || ' ' || 'Operator' AS result_string; -- Concatenation Operator
-- 예제-2
SELECT 'Concat with ' || NULL AS result_string; -- NULL
12. REPLACE() 함수
💡 REPLACE
- 문자열에서 지정된 부분 문자열을 다른 문자열로 ‘대체’하는 기능을 제공하는 함수입니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본구조 인자
- source: 대체를 수행할 원본 문자열입니다.
- old_text: 대체할 대상 문자열입니다.
- new_text: 대체될 문자열입니다.
-- 기본구조
REPLACE(source, old_text, new_text );
-- 예제-1
SELECT REPLACE('Hello, world!', 'world', 'everyone'); -- 'Hello, everyone!'
-- 예제-2
SELECT REPLACE ('ABC AA', 'A', 'Z'); -- 'ZBC ZZ'
13. TRIM() 함수
💡 TRIM
- 문자열의 양 끝에 있는 공백을 제거하는 기능을 제공합니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본구조 인자
- leading: 문자열의 시작 부분에서 공백을 제거합니다.
- trailing: 문자열의 끝 부분에서 공백을 제거합니다.
- both: 문자열의 시작과 끝 부분에서 공백을 제거합니다. (기본값)
- characters: 제거할 문자나 문자열을 지정합니다. 생략하면 공백 문자가 제거됩니다.
-- 기본 구조
TRIM([LEADING | TRAILING | BOTH] [characters] FROM string)
-- 예제-1
SELECT TRIM(' hello '); -- 'hello'
[ 더 알아보기 ]
💡 LTRIM, RTRIM, BTRIM 함수는 무엇일까?
- LTRIM 함수는 문자열의 왼쪽(시작 부분)에 있는 공백을 제거합니다.
- RTRIM 함수는 문자열의 오른쪽(끝 부분)에 있는 공백을 제거합니다.
- BTRIM 함수는 문자열의 양쪽(시작과 끝 부분)에 있는 공백을 제거합니다.
- 각각의 함수는 문자열 데이터의 전처리 또는 비교를 수행할 때 유용하게 사용될 수 있습니다.
14. FORMAT() 함수
💡 FORMAT
- 숫자 또는 날짜/시간 값을 지정된 형식으로 포맷팅 하는 기능을 제공합니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본 구조
- format_string: 포맷팅을 지정하기 위한 형식 문자열입니다.
- value1, value2, ...: 포맷팅을 적용할 값들입니다. 포맷 문자열에서 %s 또는 %L과 같은 일치하는 위치에 값이 삽입됩니다.
-- 기본구조
FORMAT(format_string, value1, value2, ...)
SELECT FORMAT('The price is $%.2f', 10.5); -- 'The price is $10.50'
SELECT FORMAT('Hello, %s','PostgreSQL'); -- 'Hello, PostgreSQL'
15. CHR() 함수
💡 CHR
- 주어진 숫자에 해당하는 ASCII 문자를 반환하는 기능을 제공합니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본구조 인자
- integer: ASCII 문자 코드를 나타내는 정수 값입니다.
-- 기본구조 인자
CHR(integer)
SELECT CHR(65); -- 'A'
SELECT CHR(97); -- 'a'
16. SUBSTRING() 함수
💡 SUBSTRING
- 문자열에서 지정된 부분 문자열을 추출하는 기능을 제공합니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본구조 인자
- string: 부분 문자열을 추출할 원본 문자열입니다.
- start_position: 추출을 시작할 위치입니다. 첫 번째 문자는 1로 시작합니다.
- length (옵션): 추출할 부분 문자열의 길이입니다. 생략하면 시작 위치부터 문자열의 끝까지 추출됩니다.
-- 기본구조-1
SUBSTRING (string ,start_position , length )
-- 기본구조-2
SUBSTRING(string FROM start_position [FOR length])
SELECT SUBSTRING ('PostgreSQL', 1, 8); -- PostgreS
SELECT SUBSTRING ('PostgreSQL', 8); -- SQL
-- 예시-1
SELECT SUBSTRING('Hello, world!' FROM 1 FOR 5); -- 'Hello'
17. TO_CHAR() 함수
💡 TO_CHAR
- 숫자나 날짜/시간 값을 지정된 형식으로 문자열로 변환하는 기능을 제공합니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본구조 인자
- value: 문자열로 변환할 숫자나 날짜/시간 값입니다.
- format: 변환된 문자열의 형식을 지정하는 형식 문자열입니다.
-- 기본구조 인자
TO_CHAR(value, format)
-- 예시-1
SELECT TO_CHAR(1234.56, '9999.99'); -- '1234.56'
💡 format 형식
형식 | 설명 |
9 | 지정된 자릿수의 숫자 값 |
0 | 앞에 0이 붙은 숫자 값 |
. (점) | 소수점 |
D | 로캘을 사용하는 소수점 |
, (콤마) | 그룹 (천 단위) 구분 기호 |
FM | 패딩 공백과 앞부분의 0을 제거하는 채우기 모드 |
PR | 각도 괄호 안의 음수 값 |
S | 로캘을 사용하는 숫자에 고정된 부호 |
L | 로캘을 사용하는 통화 기호 |
G | 로캘을 사용하는 그룹 구분 기호 |
MI | 0보다 작은 숫자의 지정된 위치에 있는 음수 부호 |
PL | 0보다 큰 숫자의 지정된 위치에 있는 양수 부호 |
SG | 지정된 위치에 있는 양수/음수 부호 |
RN | 1부터 3999까지 범위의 로마 숫자 |
TH 또는 th | 대문자 또는 소문자 서수 접미사 |
18. TO_NUMBER() 함수
💡 TO_NUMBER
- 문자열을 숫자로 변환하는 기능을 제공합니다.
- 해당 함수는 NUMBER 타입으로 값을 반환합니다.
💡 기본구조 인자
- source_string: 숫자로 변환할 문자열입니다.
- format: 변환된 숫자의 형식을 지정하는 형식 문자열입니다.
-- 기본구조
TO_NUMBER(source_string, format)
-- 예시
SELECT TO_NUMBER('1234.56', '9999.99'); -- 1234.56
format 종류 | 설명 |
9 | 지정된 자릿수의 숫자 값 |
0 | 선행 0이 있는 숫자 값 |
. (점) | 소수점 |
D | 로캘을 사용하는 소수점 |
, (쉼표) | 그룹 (천 단위) 구분 기호 |
FM | 패딩 공백과 선행 0을 억제하는 채우기 모드 |
PR | 꺽쇠 괄호로 표시된 음수 값 |
S | 로캘을 사용하는 숫자에 고정된 부호 |
L | 로캘을 사용하는 통화 기호 |
G | 로캘을 사용하는 그룹 구분 기호 |
MI | 0보다 작은 숫자에 대해 지정된 위치에 마이너스 부호 |
PL | 0보다 큰 숫자에 대해 지정된 위치에 플러스 부호 |
SG | 지정된 위치에 플러스 / 마이너스 부호 |
RN | 1에서 3999까지 범위에 있는 로마 숫자 |
TH 또는 th | 대문자 또는 소문자 서수 접미사 |
19. SPLIT_PART() 함수
💡 SPLIT_PART
- 지정된 구분자로 분리된 문자열에서 특정 위치에 있는 부분 문자열을 추출하는 기능을 제공하는 함수입니다.
- 해당 함수는 STRING 타입으로 값을 반환합니다.
💡 기본구조 인자
- source_string: 부분 문자열을 추출할 원본 문자열입니다.
- delimiter: 문자열을 분리하는 데 사용할 구분자입니다.
- position: 추출할 부분 문자열의 위치입니다. 첫 번째 부분 문자열은 1로 시작합니다.
-- 기본구조
SPLIT_PART(source_string, delimiter, position)
-- 예제-1
SELECT SPLIT_PART('apple,banana,orange', ',', 2); -- 'banana'
-- 예제-2
SELECT SPLIT_PART('A,B,C', ',', 2); -- 'B'
20. TRANSLATE() 함수
💡 TRANSLATE
- 문자열에서 지정된 문자나 문자열을 다른 문자나 문자열로 치환하는 기능을 제공하는 함수입니다.
💡 기본구조 인자
- source_string: 치환을 수행할 원본 문자열입니다.
- from_string: 치환할 대상 문자나 문자열을 지정합니다.
- to_string: 대상 문자나 문자열을 치환할 문자나 문자열로 지정합니다.
-- 기본구조
TRANSLATE(source_string, from_string, to_string)
-- 예제-1
SELECT TRANSLATE('hello world', 'ol', 'ab');
-- 예제-2
SELECT TRANSLATE('12345', '134', 'ax') -- a2x5
4) 문자열 함수 종류 -2: 심화
기능 | 분류 | 리턴값 | 설명 | 예시 |
CONCAT_WS | 값 변환 | string | 여러 문자열을 구분 기호로 연결합니다. | SELECT CONCAT_WS(', ', 'apple', 'banana', 'orange'); -- 'apple, banana, orange' |
INITCAP | 값 변환 | string | 문자열의 단어를 대문자로 변환합니다. | SELECT INITCAP('hello, world'); -- 'Hello, World' |
LOWER | 값 변환 | string | 문자열을 소문자로 변환합니다. | SELECT LOWER('HELLO'); -- 'hello' |
UPPER | 값 변환 | string | 문자열을 대문자로 변환합니다. | SELECT UPPER('hello'); -- 'HELLO' |
REPEAT | 값 변환 | string | 문자열을 지정된 횟수만큼 반복합니다. | SELECT REPEAT('abc', 3); -- 'abcabcabc' |
LTRIM | 값 변환 | string | 문자열의 왼쪽에서 지정된 문자를 제거합니다. | SELECT LTRIM(' hello ', ' '); -- 'hello ' |
RTRIM | 값 변환 | string | 문자열의 오른쪽에서 지정된 문자를 제거합니다. | SELECT RTRIM(' hello ', ' '); -- ' hello' |
오늘도 감사합니다. 😀
반응형
'DB > API Document' 카테고리의 다른 글
[DB/Postgres] PostgreSQL 데이터 타입의 종류 이해하기 (1) | 2023.12.21 |
---|---|
[DB/postgres] 윈도우 함수(Window Function) 이해 및 활용방법 (0) | 2023.09.28 |
[DB/Postgres] 날짜 함수(Date Function) 이해 및 활용방법 (4) | 2023.09.16 |
[DB/Postgres] 수학 함수(Math Function) 이해 및 활용방법 (0) | 2023.09.13 |
[DB/Postgres] 집계 함수(Aggregate Function) 이해 및 활용방법 (0) | 2023.09.10 |