2009-08-21 5 views
3

필자는 자신의 통제 범위를 벗어나는 이유로 인해 CSV 문자열이 포함 된 Oracle 데이터베이스에 열이 있습니다.오라클 문자열 바꾸기

항목 A, 항목 B, 항목 C, 항목 d를 나는 항목 C를 제거하기 위해 UPDATE 문을 실행합니다. 따라서 어떻게 달성 할 수

항목 A, 항목 B, 항목 D

으로 결말이

답변

9

당신은 오라클 REPLACE 기능을 사용할 수 있습니다

UPDATE table 
SET col = replace(col, 'item c', '') 

당신은 단지주의해야을 이를 CSV의 일부로 처리합니다 (예 : 다음 쉼표 제거). 이것은 '항목 c'를 먼저 교체 한 다음 '항목 c'를 교체하여 두 경우를 모두 캡처하는 것을 의미 할 수 있습니다.


편집 : 아, 나는 오해했을 수도 있습니다. 내 솔루션은 CSV에서 특정 문자열을 제거하는 것을 기반으로합니다. - 항상 세 번째 항목을 바꾸려면 Vincent의 대답이 필요합니다.

2

세 번째 항목을 제거하려면 INSTR과 SUBSTR 조합을 사용할 수 있습니다. 필드 : 오라클의 비교적 최신 버전이있는 경우

SQL> WITH a AS (SELECT 'Item a,Item b,Item c,Item d' col FROM dual) 
    2 SELECT substr(col, 1, instr(col, ',', 1, 2)) 
    3   || substr(col, instr(col, ',', 1, 3) + 1) sub 
    4  FROM a; 

SUB 
-------------------- 
Item a,Item b,Item d 
4

(나는 정규 표현식은 오라클 (10)에 도입 된 생각), 사용할 수 REGEXP_REPLACE :

UPDATE table SET column = REGEXP_REPLACE(column,'[^\,]+,','',1,3) 

은 (또한,에 폭력적인 일을하십시오 저장된 천재 CSV는 관계형 데이터베이스에서 이런 식으로 처리됩니다.)

+0

CSV 항목에 쉼표가 포함 된 문자열이 인용되어있는 경우에만주의하십시오. ' "Smith, John", 123,2009-12-31' –

+0

정규식 지원이 빠르게 좋아하는 기능이되었습니다! ! – caddis