SQL 컬럼 합치기 - SQL keolleom habchigi

 CONCAT이란?

여러 문자열 or 컬럼을 합쳐서 조회해와야 할때가 종종 있습니다.

이때 사용하는 함수는 CONCAT 입니다.

즉, CONCAT 함수는 둘 이상의 문자열을 순서대로 합쳐주는 역할을 하는 함수 입니다.

※ 사용 예시 : CONCAT(문자열1, 문자열2 [, 문자열3 ...])

● 예제 쿼리

실행 쿼리 : SELECT CONCAT('이곳은 ', '트롤의 ', '공간입니다.') AS table_name;
결과 : 이곳은 트롤의 공간입니다.

예제 테이블 : good_table

idx good price
1 사과 3달러
2 복숭아 4달러
3 자두 3달러
4 바나나 2달러

실행 쿼리 : SELECT CONCAT(good,'의 가격은  ',price) as good_column FROM good_table;

결과

good_column 
사과의 가격은 3달러
복숭아의 가격은 4달러
자두의 가격은 3달러
바나나의 가격은 2달러

SQL Server에서 문자열을 합칠 때는 CONCAT 함수와 더하기(+) 연산자를 사용한다. 문자열을 합칠 때는 되도록이면 CONCAT 함수를 사용할 것을 권장하지만, 더하기 연산자를 사용하는 것이 더 익숙하기 때문에 더 많이 사용하는 듯하다. 더하기 연산자를 사용할 때는 주의사항이 있으니 아래를 참고하기 바란다.

CONCAT 함수 사용하여 문자열 합치기

SELECT CONCAT('SQL', 'Server', '2019') AS str1 , CONCAT(2021, 12, 31, 23, 59, 59) AS str2

CONCAT 함수는 많은 데이터베이스에서 사용 가능한 ANSI SQL 함수이며, CONCAT 함수에 입력된 값은 문자형으로 변환 후 합치는 작업이 이뤄진다. 숫자와 문자가 함께 입력되어도 오류가 발생하지 않는다.

CONCAT 함수의 문자 파라미터는 254개 까지 입력이 가능하다.

더하기(+) 연산자를 사용하여 문자열 합치기

SELECT 'SQL' + 'Server' + '2019' AS str1 , '2021' + '12' + '31' + '23' + '59' + '59' AS str2

문자열을 합치 때 더하기 연산자를 가장 많이 사용할 것이다. 문자열과 문자열을 합칠 때는 문제가 발생하지 않지만 문자열과 숫자를 합칠 경우 오류가 발생할 수 있으니 아래를 참고하기 바란다.

※ 더하기(+) 연산자 사용 시 주의사항

문자열과 숫자를 더하기 연산자로 합치면 오류가 발생한다.

이런 경우 CONCAT 함수를 사용하면 오류가 발생하지 않으며, 더하기 연산자를 사용해야 할 경우 문자형으로 변환 후 합쳐야 오류가 발생하지 않는다.

숫자와 수치형 문자를 합 칠경 우 수치형으로 변환 후 더하기 연산을 한다.

문자열로 합쳐야 할 경우 문자형으로 변환 후 합쳐야 한다.

CONCAT_WS 함수 (구분자로 합치기)

SELECT CONCAT_WS(', ', 'SQL', 'Server', '2019') AS str1 , CONCAT_WS('@', 'test', 'naver.com') AS str2

CONCAT_WS("구분자", "문자열", "문자열", "문자열"...)

문자열을 특정 구분자로 합칠 때 유용하게 사용할 수 있다.

두 개 이상의 컬럼을 합쳐 하나의 문자열 컬럼으로 표시하거나, 컬럼 몇 가지의 데이터를 이용해 완성된 문장을 출력해야 하는 경우가 있습니다.

- 두 문자열을 연결하고 싶다. 문자열을 병합하고 싶다. 어떤 문자들을 합쳐서 한 개의 컬럼으로 만들고 싶다...

ex.

고객 성명 데이터를 이용해 '어서오세요, OOO님. 환영합니다' 인사말 메시지를 자동으로 만들기

고객의 성과 이름을 합쳐 한 개의 full name 컬럼으로 만들기

...

hr 연습계정에서 가장 쉬운 예로, 성명이 first_name과 last_name 2개 컬럼으로 분리되어 있습니다. 따라서 직원의 풀네임(full name)을 1개의 컬럼으로 만드려면 두 개 컬럼의 정보를 연결하여 출력해야 합니다.

이 때 사용되는 것이 문자열 연결 연산자(||) 또는 CONCAT 함수입니다.

hr 연습계정 employees 테이블의 예

1. 문자열 연결 함수·연결 연산자의 정의와 그 표현

1) 기본 원리

(1) 2개의 문자열을 연결

구분

결과

CONCAT('가나', '다라')

가나다라

가나||다라

가나다라

구분

CONCAT(컬럼이름1,컬럼이름2)

컬럼1내용컬럼2내용

컬럼이름1 || 컬럼이름2

컬럼1내용컬럼2내용

2) 3개 이상의 문자열 또는 컬럼을 연결하는 경우

(1) 기본 구성

구분

결과

CONCAT('가나',CONCAT('다라','마바'))

가나다라마바

가나||다라||마바

가나다라마바

CONCAT 함수는 반드시 2개의 문자열 또는 컬럼만 연결할 수 있게 되어 있으므로, 문자열 또는 컬럼의 수가 3개 이상일 경우 늘어나는 수만큼 CONCAT을 중복해서 써야 하는 번거로움이 있습니다. 따라서, 3개 이상의 문자열을 연결할 경우 연결 연산자 '||'를 사용하는 것이 간편합니다.

(2) 응용 : 문자를 띄어서(공백, 스페이스) 연결하기

구분

결과

CONCAT('가나',CONCAT(' ','다라'))

가나 다라

가나||' '||마바

가나 다라

공백은 ' '(작은따옴표 안에서 스페이스) 로 하여, 문자열처럼 연결 연산자로 연결합니다.

마찬가지로 CONCAT의 경우 2번 이상 써야 하는 번거로움이 있어, 3개 이상의 문자 연결 시 이하의 예제에서는 가급적 '||'를 사용합니다.

2. 예제 : 연결 연산자를 사용한 문자열 연결

* 이하의 예제에서는 hr 연습계정의 employees 테이블을 사용합니다.

1) employees 테이블에서 이름(first_name)과 성(last_name)을 연결하여, full name을 1개의 'name'이라는 컬럼으로 출력하기(성과 이름을 띄어서 구분하도록 합니다)

(1) 연결 연산자 || 를 사용하는 경우

first_name

' '

last_name

위 3개를 연결연산자 '||'로 연결해 줍니다.

select first_name||' '||last_name as name from employees;

위 SQL 문장을 Ctrl+Enter로 실행하면 아래와 같은 결과를 얻을 수 있습니다.

이름(first_name)과 성(last_name)이 합쳐진 풀네임이 1개 컬럼(name)으로 출력되었습니다.

(2) CONCAT 함수를 사용하는 경우

위와 동일한 문제를 연결연산자 '||'가 아닌 CONCAT 함수를 사용해 문자열을 연결하는 경우입니다.

first_name

' '

last_name

문자열과 컬럼이 총 3개이므로, CONCAT 함수를 2번 써 주어야 합니다.

※ 주의 : CONCAT(first_name, ' ', last_name) 과 같은 표현은 잘못된 표현입니다.

CONCAT 함수의 인수는 2개여야 합니다.

select concat(first_name, concat(' ', last_name)) as name from employees;

위 문장을 Ctrl+Enter로 실행하면, 연결연산자 '||'로 연결한 경우와 같은 결과가 출력됩니다.

2) employees 테이블에서 이름(first_name)과 성(last_name)을 연결하여,

'안녕하세요, OOO OOO님, 가입을 환영합니다' 문구가 출력되는 컬럼 만들기

'안녕하세요, '

first_name 컬럼

' '

last_name 컬럼

'님, 가입을 환영합니다'

총 5개의 컬럼과 문자열을 연결연산자 ||로 연결합니다.

select '안녕하세요, '||first_name||' '||last_name||'님, 가입을 환영합니다' from employees;

위 SQL 문장을 실행하면, Oracle SQL Developer는 아래와 같은 결과를 출력하게 됩니다.

안녕하세요, first_name last_name님, 가입을 환영합니다.

3) employees 테이블에서 이름(first_name), 성(last_name), 이메일(email)을 연결하여, 'OOO OOO의 이메일 주소는 입니다' 문구가 출력되는 컬럼 만들기

- 이메일 주소는 모두 소문자로 표기하기

first_name 컬럼

' '

last_name 컬럼

'의 이메일 주소는 '

email컬럼(*lower 함수를 이용해 소문자로 변환)

'@tenebris.com 입니다'

6개의 문자열과 컬럼을 연결연산자 ||로 연결하여 출력해야 합니다.

select first_name||' '||last_name||'의 이메일 주소는 ' ||lower(email)||'@tenebris.com입니다' as 이메일안내문구 from employees;

위 SQL 문장을 실행하면, 오라클 SQL 디벨로퍼는 아래와 같은 결과를 내보냅니다.

first_name last_name의 이메일 주소는 입니다.

#오라클 #SQL #오라클SQL #OracleSQLDeveloper #연결연산자 #문자열연결 #문자열병합 #문자합치기

Toplist

최신 우편물

태그