텍스트 데이터 다루는 건 DB 작업에서 맨날 하는 일이야. 예를 들어, 너가 인터넷 쇼핑몰 개발자라고 치자. 유저 DB가 있는데, 사이트에 유저 전체 이름을 환영 배너에 띄워야 해. 예를 들면: "환영합니다, Otto Art!". 또는 이메일 주소를 전부 소문자로 표준화해야 할 수도 있지. 이런 상황에서 문자열 함수 없으면 진짜 불편해.
PostgreSQL은 텍스트 다루는 데 쓸만한 함수들이 많아. 오늘은 그중에서 세 가지 기본 함수만 딱 짚고 갈게:
CONCAT()— 문자열 합치기.UPPER()— 문자열을 대문자로 바꾸기.LOWER()— 문자열을 소문자로 바꾸기.
CONCAT() 함수 다루기
CONCAT() 함수는 여러 문자열을 하나로 이어붙여 줘. 만약 데이터가 여러 컬럼에 나눠져 있는데, 합쳐서 보여주고 싶을 때 완전 필수야.
문법
CONCAT(string1, string2, ..., stringN)
string1,string2,stringN— 합치고 싶은 문자열이나 컬럼.- 모든 인자를 이어붙인 하나의 문자열을 반환해.
예시: 이름 처리하기
예를 들어, students 테이블이 있다고 해보자:
| first_name | last_name |
|---|---|
| Otto | Art |
| Maria | Chi |
| Anna | Pal |
목표: 학생 전체 이름을 "이름 성" 형식으로 보여주기.
쿼리:
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM students;
결과:
| full_name |
|---|
| Otto Art |
| Maria Chi |
| Anna Pal |
이름과 성 사이 ' '에 주목! 이건 우리가 문자열 사이에 띄어쓰기를 넣으려고 추가한 거야.
사용할 때 주의할 점
CONCAT()는 NULL을 무시해. 만약 인자 중 하나가 NULL이면 그냥 건너뛰어. 아직 NULL이 뭔지 모르면 걱정 마, 곧 설명해줄게.
CONCAT() 대신 || 연산자도 쓸 수 있어. 예를 들면:
SELECT first_name || ' ' || last_name AS full_name FROM students;
문자열 대소문자 바꾸기: UPPER()와 LOWER()
이메일 주소를 다룬다고 해보자. 유저들이 ivan@example.com, IVAN@EXAMPLE.COM처럼 각자 다른 대소문자로 입력했을 수 있어. 표준화하려면 보통:
- 비교 전에 전부 같은 형태(예:
lowercase)로 바꿔. - 중요한 단어는 강조하려고(
UPPERCASE로) 바꿔 쓰기도 해.
UPPER(): 문자열을 대문자로
UPPER() 함수는 문자열을 전부 대문자로 바꿔줘.
문법:
UPPER(string)
string— 문자열이나 텍스트 컬럼 이름.
예시:
students 테이블에 email 컬럼이 추가됐다고 해보자:
| first_name | last_name | |
|---|---|---|
| Otto | Art | otto@example.com |
| Maria | Chi | MARIA@EXAMPLE.com |
| Anna | Pal | anna.pal@mail.ru |
이메일을 전부 대문자로 보여주고 싶으면:
SELECT email, UPPER(email) AS email_upper
FROM students;
결과:
| email_upper | |
|---|---|
| otto@example.com | OTTO@EXAMPLE.COM |
| MARIA@EXAMPLE.com | MARIA@EXAMPLE.COM |
| anna.pal@gmail.com | ANNA.PAL@GMAIL.COM |
LOWER(): 문자열을 소문자로
마찬가지로, LOWER() 함수는 문자열을 전부 소문자로 바꿔줘.
문법:
LOWER(string)
예시:
이메일을 전부 소문자로 바꿔보자:
SELECT email, LOWER(email) AS email_lower
FROM students;
결과:
| email_lower | |
|---|---|
| otto@example.com | otto@example.com |
| MARIA@EXAMPLE.com | maria@example.com |
| anna.pal@gmail.com | anna.pal@gmail.com |
실전 예제랑 케이스
지금까지 배운 거 다 합쳐보자.
전체 이름을 대문자로 만들기
쿼리:
SELECT CONCAT(UPPER(first_name), ' ', UPPER(last_name)) AS full_name_upper
FROM students;
결과:
| full_name_upper |
|---|
| OTTO ART |
| MARIA CHI |
| ANNA PAL |
여기서는 CONCAT()로 이름과 성을 합치고, UPPER()로 전부 대문자로 바꿨어.
예시: 이메일 주소 표준화
이메일을 전부 소문자로 통일하고 싶으면:
UPDATE students
SET email = LOWER(email);
이제 테이블에 있는 이메일들은 원래 대소문자 상관없이 전부 똑같이 소문자로 저장돼.
UPDATE 연산자가 어떻게 동작하는지는 다음 강의에서 알려줄게.
유저 환영 메시지 만들기
전체 이름 앞에 "환영합니다" 메시지를 붙여보자:
SELECT CONCAT('환영합니다, ', first_name, ' ', last_name, '!') AS greeting
FROM students;
결과:
| greeting |
|---|
| 환영합니다, Otto Art! |
| 환영합니다, Maria Chi! |
| 환영합니다, Anna Pal! |
문자열 함수 쓸 때 흔한 실수
CONCAT()에서 띄어쓰기 빼먹으면 결과가 이상하게 나올 수 있어. 예를 들어:
SELECT CONCAT(first_name, last_name) AS full_name
FROM students;
결과는 "OttoArt", "MariaChi"처럼 붙어서 나와. 꼭 필요한 곳에 띄어쓰기 추가해줘.
NULL 사용. CONCAT() 인자 중 하나가 NULL이면 문자열이 이상하게 나올 수 있어. 예를 들어:
SELECT CONCAT(first_name, ' ', middle_name, ' ', last_name) AS full_name
FROM students;
만약 middle_name = NULL이면 결과가 "Otto NULL Art"처럼 돼. 이럴 땐 COALESCE() 함수를 쓰면 돼:
SELECT CONCAT(first_name, ' ', COALESCE(middle_name, ''), ' ', last_name) AS full_name
FROM students;
NULL이랑 COALESCE() 함수에 대해서는 곧 더 자세히 알려줄게 :P
GO TO FULL VERSION