반응형
Oracle에서 varchar를 별도의 열로 분할
나는 약간 곤경에 처해 있습니다.데이터베이스에서 특정 문자열로 시작하는 주석을 입력하고 그 결과를 별도의 열로 분리하라는 요청을 받았습니다.
예를 들어, 반환된 값이 다음과 같은 경우:
COLUMN_ONE
--------------------
'D7ERROR username'
반환은 다음과 같아야 합니다.
COL_ONE COL_TWO
--------------------
D7ERROR username
문자열을 두 개로 분할하기 위해 결과 집합이 구성되면 열을 정의하는 것이 가능합니까?
데이터의 일관성에 따라 달라집니다. 단일 공백이 열 1과 열 2 사이의 구분 기호라고 가정합니다.
SELECT SUBSTR(t.column_one, 1, INSTR(t.column_one, ' ')-1) AS col_one,
SUBSTR(t.column_one, INSTR(t.column_one, ' ')+1) AS col_two
FROM YOUR_TABLE t
Oracle 10g+는 정규식을 지원하므로 해결해야 하는 상황에 따라 유연성을 높일 수 있습니다.정규식 하위 문자열 방법도 있습니다.
참조:
REGEXP_SUBSTR은 다음과 같이 간단합니다.
SELECT REGEXP_SUBSTR(t.column_one, '[^ ]+', 1, 1) col_one,
REGEXP_SUBSTR(t.column_one, '[^ ]+', 1, 2) col_two
FROM YOUR_TABLE t;
간단한 방법은 열로 변환하는 것입니다.
SELECT COLUMN_VALUE FROM TABLE (SPLIT ('19869,19572,19223,18898,10155,'))
CREATE TYPE split_tbl as TABLE OF VARCHAR2(32767);
CREATE OR REPLACE FUNCTION split (p_list VARCHAR2, p_del VARCHAR2 := ',')
RETURN split_tbl
PIPELINED IS
l_idx PLS_INTEGER;
l_list VARCHAR2 (32767) := p_list;
l_value VARCHAR2 (32767);
BEGIN
LOOP
l_idx := INSTR (l_list, p_del);
IF l_idx > 0 THEN
PIPE ROW (SUBSTR (l_list, 1, l_idx - 1));
l_list := SUBSTR (l_list, l_idx + LENGTH (p_del));
ELSE
PIPE ROW (l_list);
EXIT;
END IF;
END LOOP;
RETURN;
END split;
언급URL : https://stackoverflow.com/questions/5199849/split-varchar-into-separate-columns-in-oracle
반응형
'programing' 카테고리의 다른 글
에 의해 정의된 경우 .in .Range가 필요합니다.세포? (0) | 2023.06.15 |
---|---|
루비 온 레일즈에서 "10월 5일 일요일"과 같이 "th" 접미사로 날짜 형식을 지정하려면 어떻게 해야 합니까? (0) | 2023.06.15 |
python-dev 설치 오류:가져오기 오류: 이름이 apt_pkg인 모듈이 없습니다. (0) | 2023.06.15 |
Django 모델 생성 또는 업데이트(있는 경우) (0) | 2023.06.10 |
Python 요청이 자체 서명된 SSL 인증서를 신뢰하도록 하는 방법은 무엇입니까? (0) | 2023.06.10 |