2015-01-09 2 views
1

내가 연결해야하는 4 개의 열이있는 테이블이 있습니다. 두 개의 열에는 일부 NULL 값이 들어 있습니다.Postgres : null을 포함하여 여러 열을 concat

colA,colB,colC,colD 

또는 (여기 COLB) 하나 개의 컬럼이 null의 경우,

colA,,colC,colD 

I가없는 것을 :

나는과 같이, 네 개의 열을 나타내는 분리기를 포함하는 결과를 필요 이것을하기위한 깨끗한 방법을 찾으십시오. 내가 생각해 낸 최선은 다음과 같습니다.

concat_ws(colA, COALESCE(colB, ''), COALESCE(colC, ''), colD, ',') 

이것은 특히 반복적으로해야하기 때문에 번거롭고 느낍니다. 더 좋은 방법이 있습니까?

+0

예. 위 예제에서 얻은 결과는 colA, colC, colD입니다. colB의 자리 표시 자로는 쉼표/​​구분 기호가 없습니다. – user1453804

답변

-2

난 당신이이처럼 NVL() 함수를 사용해야합니다 null 값을 보여주고, 또한 커서 다음 루프를 사용하여 순서대로해야한다고 생각 :

절차의 TODO VARCHAR2에서 VAUX입니다; CURSOR CUR_TEST IN SELECT NVL (colb, 'replace_with'), colA, colD FROM DUAL; CUR_TEST 루프에서 x에 대해 시작 vAux : = x.colb || ','|| x.colA || ','|| x.colD; 끝 루프;

end TODO;

무엇 NVL 확인을위한

()을 수행합니다 http://www.techonthenet.com/oracle/functions/nvl.php

+1

먼저이 문제에 대한 커서는 잘못된 선택입니다. 둘째는 Postgres를위한 것이지, 오라클을위한 것이 아닙니다 –

2

최종 값 이 NULL 일 수 없습니다 수 있기 때문에, 당신이 그들을 보존에 대해 걱정할 필요가 없습니다. 그냥 빈 문자열을 사용하십시오. 표준 SQL로 작성하는 방법입니다.

select coalesce(cola, '') || ', ' || 
     coalesce(colb, '') || ', ' || 
     coalesce(colc, '') || ', ' || 
     coalesce(cold, '') 
from your_table_name; 

CONCAT_WS() 함수는 빈 문자열을 생략하지 않지만, 가 null 열을 건너 않습니다. 즉, 여전히 coalesce()를 사용해야합니다.

select concat_ws(', ', coalesce(cola, ''), 
         coalesce(colb, ''), 
         coalesce(colc, ''), 
         coalesce(colb, '')) 
from your_table_name; 
+0

효율성의 관점에서 볼 때, || concat_ws 함수보다 낫지? 내가 피하려고했던 것은 매번 합병을 쓰는 것이 었습니다. (철자) – user1453804

+0

@ MikeSherrill'CatRecall : Postgres **는 ** concat_ws() 함수를 가지고 있습니다 : http://www.postgresql.org/docs/current/static/functions-string.html#FUNCTIONS -STRING-OTHER (null 값도 건너 뜁니다.) –

+0

하! 어디에서 나온거야? (9.1에서 도입) –

관련 문제