프리랜서_코더 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() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입