[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 |
댓글