본문 바로가기
SQL

CONCAT 함수

by Killing_me__ 2021. 9. 3.
반응형

[CONCAT 함수란?]

CONCATENATION의 약자로, '문자열의 연결' 이라는 뜻을 가지고 있다.

즉, 문자열을 연결하고 싶을 때 CONCAT 을 사용한다.

 

 

[CONCAT(문자열1, 문자열2)]

<QUERY>

SELECT CONCAT('류하의 ', '공부일기') 결과
FROM TABLE;

<RESULT>

  결과
1 류하의 공부일기

 

 

[여러 개의 문자열 CONCAT(공백추가)]

<QUERY>

SELECT CONCAT('문자열', ' ', '합치기') 결과
FROM TABLE;

 

<RESULT:ORACLE>

ERROR : 인수의 개수가 부적합합니다

<RESULT:MySQL>

  결과
1 문자열 합치기

ORACLE과 SQL의 결과 차이를 볼 수 있다.

SQL Server, MySQL, ORACLE, PostgreSQL 등 모두 CONCAT 함수를 지원하는데, 어떤 DBMS인지에 따라 매개변수를 허용하는 개수가 다르기 때문이다.

ORACLE은 매개변수를 두 개만 받기 때문에 여러 문자를 연결하려면 중첩해서 CONCAT을 사용해줘야 한다.

 

<QUERY:ORACLE>

SELECT CONCAT(COCNAT('문자열', ' '), '합치기') 결과
 FROM TABLE;

 

 

[ || 연산자(문자열 vs 참)]

우리가 흔히 알고있는 || 연산은 논리연산자 OR을 의미하는 용도로 많이 쓰인다.

그러나 ORACLE에서는 문자열을 연산시켜주는 도구로 사용된다.

<QUERY>

SELECT '문자열' || ' ' || '합치기' 결과
FROM TABLE;

 

<RESULT:ORACLE>

  결과
1 문자열 합치기

<RESULT:MySQL>

  결과
   

 

ORACLE에서는 || 연산자가 문자열을 이어붙이는 거라면, MySQL에서는 논리연산자 OR을 의미하기 때문에

결과가 나오지 않는 것을 확인할 수 있다.

 

 

[NULL 테스트]

<QUERY>

SELECT CONCAT(CONCAT(1234, NULL), 'qwer') 결과
FROM TABLE; 

 

<RESULT:MySQL>

결과
(NULL)

<RESULT:ORACLE>

결과
1234qwer

 

MySQL에서는 CONCAT에 NULL이 포함되어 있으면 NULL을 리턴한다.

반면 ORACLE에서는 NULL을 빈 문자열로 간주하고 이어붙인 결과를 리턴하는 것을 볼 수 있다.

 

즉, ORACLE에서 CONCAT 함수는 모든 인수를 묵시적으로 문자열 형식으로 변환한 다음 연결된다.

따라서 NULL인 데이터도 빈 문자열로 변환되어 연결된다.

MYSQL에서 NULL 리턴을 방지하고 싶다면 ISNULL 이라는 함수를 사용하여 NULL일 경우 빈 문자열로 치환되도록 변환해주면 된다.

반응형

'SQL' 카테고리의 다른 글

[데이터 모델링의 이해]  (2) 2023.11.25
ALIAS(별칭)  (0) 2021.09.08
WHERE 조건절  (0) 2021.07.13

댓글