오라클 문자열 합치기 구분자 - olakeul munjayeol habchigi gubunja

프리랜서_코더 2021. 1. 15. 09:00

Oracle에서는 문자열은 ||을 사용하여 합치면 된다.

예시 

select ('2021-01-01' || ' ~ ' || '2021-01-02') as resultDate from dual;

MySQL은 CONCAT함수를 사용하여 합쳐야 한다

예시

select concat('2021-01-01','2021-01-02') as resultDate from dual;

추가적으로 MySQL은 CONCAT_WS([구분자], [인자값1], [인자값2], [인자값3],...)의 함수도 존재한다.

예시

select concat_ws(' ','서울특별시','중구','세종대로') as result from dual;

Oracle에서도 CONCAT함수를 제공한다. 그러나 인자값을 2개만 쓸 수 있으므로 불편한 상황이 발생한다.

예를 들면, 기존 SQL에 내용을 추가하게 될 때, 아래 예시 같이 쿼리의 가독성이 떨어지게 된다.

따라서, 몇 번의 추가적인 내용이 더 생기게 된다면 쿼리가 무엇을 합치려는지 쉽게 알 수가 없기 때문에 CONCAT함수보다는 ||의 사용을 더 선호한다.

예시

SELECT CONCAT('서울시','중구') FROM DUAL; SELECT CONCAT(CONCAT('서울시','중구'),'세종대로') FROM DUAL;

Database/Oracle

오라클 CONCAT 함수: 문자열 합치기

wookoa 2017. 12. 7. 22:37

오라클에서는 문자열을 합칠 수 있는 함수가 존재한다. 단순히 연결 연산자(||)와 동일한 기능을 한다. 오라클 관점에서는 연결 연산자를 통한 쿼리보다 조금더 안정적인 가독성을 제공한다. 오라클 11g 교제에는 아래와 같이 함수를 설명하고 있다.

# CONCAT(column1|expression1, column2|expression2)

  -. 첫번째 문자 값을 두번째 문자 값과 연결합니다. 연결연산자(||)와 같은 기능입니다.

사용법에 대한 특별한 설명은 필요없이 몇번 조작해보면 금방 익힐 수 있다. 단순하게 expression1과 expression2를 연결해주는 역할이 전부다. 오라클에서 기본으로 제공되는 EMP 테이블로 예제는 아래와 같다.

SELECT CONCAT(JOB, SAL)
  FROM EMP;

오라클 관점에서는 가독성을 높여줄 지 몰라도 단점이 있다. 단 두개의 문자열에 대해서만 연결이 가능하다는 점이다. 3개의 문자열을 합치려면 함수를 함수로 감싸줘야 한다.

SELECT CONCAT(CONCAT(JOB, SAL), MGR)
  FROM EMP;

오라클 문자열 함수 중 하나인 CONCAT 함수에 대해서 알아보았다. 비교적 쉽게 몇번의 조작으로 사용할 수있다.

데이터베이스 질문과 답변

컬럼 수가 많은 경우, 문자열 합치기 어떻게 하나요? 0 9 7,928

by 민횬 [2013.03.19 15:11:07]

좋은 글들 참 고맙습니다.

요즈음 조그만 DB Application 개발을 하고 있는데요.

한 Table에 Column 수가 좀 많습니다. 
Result1 ~ Result500 이런 식으로 유사한데, 갯수가 많네요.

한 줄로 구분자 사용해서 만들려고 합니다. 아래처럼요.
54:32:21:..................................................:19

Excel로 길게 쿼리 만들면 되는데, 약간 무식하게 보여서요.
C# 처럼, Function이나 SP 만들어 두고 싶은데요.
for (...)
{
str += result[i] + ':';
}
좀 세련된 방법은 없을까요? **;
오라클 10g에서요.

고맙습니다.

by 사랑초 [2013.03.19 15:27:52]

음... wm_concat 같은 기능을 찾으시는건가여?

by 채용근 [2013.03.19 15:28:05]

SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 테이블명

by 민횬 [2013.03.19 15:37:19]

질문자입니다.
예를 좀 더 들면요.

SELECT RESULT1 || ':' || RESULT2 || ':' || ... || RESULT500
FROM TABLE1;

이렇게 500개를 다 써 주어야 하는게 좀 심해서요.

그런데, 한 Table에 있는 여러 Column이라서, 비슷한 예제가 없네요.
사랑초님께)  WM_CONCAT도 적당하지 않은 것 같구요.
채용근님께)  구분자를 넣어야 합니다요.

하드코딩 말고 방법이 없을까요?

by 채용근 [2013.03.19 15:47:11]

SELECT REPLACE ( WM_CONCAT ( COLUMN_NAME ), ',', ':' )
  FROM ALL_TAB_COLUMNS
 WHERE TABLE_NAME = 테이블

이걸 말하신게 아니가요?

by 민횬 [2013.03.19 16:24:03]

고맙습니다.

직접 적지 않아도 되겠군요. 하하.
그런데, 개인용 익스프레스 에디션에는 WM_CONCAT이 없네요, 에궁.

아뭏든 채용근님 가르쳐주신 대로 하면 될 것 같네요.
다시 한번 고맙습니다. 꾸뻑^^

by 마농 [2013.03.19 16:36:56]

by 손님 [2013.03.19 21:12:18]

질문자는 아니지만 쿼리를 보고 궁금증이 생겨서 글을 올립니다..

SELECT REPLACE ( WM_CONCAT ( COLUMN_NAME ), ',', ':' )
  FROM ALL_TAB_COLUMNS
 WHERE TABLE_NAME = 테이블;

에서 만약 중복을 제거하려면 어떻게 해야 할까요??

by 마농 [2013.03.19 21:23:25]

wm_concat(DISTINCT column_name)

by 손님 [2013.03.20 09:54:48]

아...distinct 가 안에 들어가면 되는군요...

감사합니다..^^

댓글등록

SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.

로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입

Toplist

최신 우편물

태그