저장 데이터 값을 분리해서 가져오기 문의드립니다. 8

by 스나이퍼 [2014.09.24 18:17:18]


특정 필드값에서 AAA, BBB로 값을 가져온후 split으로 값을 분리했으나

이방법보다는 sql에서 -로 분리, ^로 분리해서 각각의 값을 가져올려고 합니다.

- 로 sql substr으로 분리해서 값을 가져오고,

또 가져온 값에서 ^ 로 분리해서 값을 가져오려고 합니다.

아래는 instr으로 첫번째는 가져오는데 그다음을 가져오려고하니 잘 되지 않습니다.

조언 부탁드립니다.

SELECT  SUBSTR(AAA, 1, INSTR(AAA, '-', 1, 1) - 1),

               SUBSTR(AAA, INSTR(AAA, '-', 1, 1) + 1), 

???

 

아래 필드값입니다.

AAA 필드값 : 12345   -A^H^D-R-M

BBB 필드값 : A1CD -D^H-R-M

 

 

by 아발란체 [2014.09.25 03:05:26]
WITH T AS (
  SELECT '12345   -A^H^D-R-M' aaa, 'A1CD -D^H-R-M' bbb FROM DUAL
)
SELECT 
  A.aaa, B.bbb
FROM (
  SELECT LEVEL AS LV, REGEXP_SUBSTR(aaa, '[^-|\^]+', 1, LEVEL) AS aaa, NULL AS bbb FROM T
  CONNECT BY LEVEL <= REGEXP_COUNT(AAA, '[^-|\^]+')
) A
FULL OUTER JOIN (
  SELECT LEVEL AS LV, NULL AS aaa, REGEXP_SUBSTR(bbb, '[^-|\^]+', 1, LEVEL) AS bbb FROM T
  CONNECT BY LEVEL <= REGEXP_COUNT(bbb, '[^-|\^]+')
) B
ON (
  A.LV = B.LV
)

 


by 스나이퍼 [2014.09.25 08:12:47]

죄송합니다만 ㅠ

ORA-00904:"REGEXP_COUNT" : 부적합한 식별자

라고 에러메시지가 나옵니다.

다시한번 봐주시면 감사하겠습니다.

 


by 마농 [2014.09.25 08:19:33]

원하시는 결과자료를 보여주시면 좋겠습니다. 


by 스나이퍼 [2014.09.25 08:44:45]

AAA 필드값 : 12345   -A^H^D-R-M

BBB 필드값 : A1CD -D^H-R-M

regexp_substr((replace(AAA,' ','')), '[^-]+') as a1,

regexp_substr((replace(BBB,' ','')), '[^-]+') as a2

-->

a1 : 12345

a2 : A1CD

여기까지는 값을 가져왔습니다.

그런데, ㅠ

두번째 - 위치 뒤에 있는 A^H^D-R-M 에서 다시 - 로 분리해서 또다시 A^H^, D, R, M 으로 분리하구요.

다시 A^H^ 값을 ^로 분리해서 A, H로 나누려고 합니다.

최종 결과값은 아래입니다.

---------------------------------------------------

레코드1 | 12345 | A | H | D | R | M

레코드2 | A1CD | D | H |    |  R | M

---------------------------------------------------

제가 생각하는 부분을 글로 표현하다보니 잘 전달이 되지 않네요. 죄송합니다.


by 아발란체 [2014.09.25 09:07:11]
WITH T AS (
  SELECT '12345   -A^H^D-R-M' aaa, 'A1CD -D^H-R-M' bbb FROM DUAL
)
SELECT 'RECODE1 |' AS nm, REGEXP_REPLACE(aaa, '[-|\^| ]+', ' | ') FROM T
UNION ALL
SELECT 'RECODE2 |' AS nm, REGEXP_REPLACE(bbb, '[-|\^| ]+', ' | ') FROM T

 


by 스나이퍼 [2014.09.25 09:27:33]

감사드립니다.^^

덕분에 좋은 정보 알게되었습니다.

오늘도 즐거운 하루 보내십시오~~

 


by 마농 [2014.09.25 09:08:13]
WITH t AS
(
SELECT 'AAA' cd, '12345   -A^H^D-R-M' v FROM dual
UNION ALL SELECT 'BBB', 'A1CD -D^H-R-M' FROM dual
)
SELECT cd
     , v
     , REGEXP_SUBSTR(v, '[^-]+', 1, 1) v1
     --, REGEXP_SUBSTR(v, '[^-]+', 1, 2) v2
     , REGEXP_SUBSTR(REGEXP_SUBSTR(v, '[^-]+', 1, 2), '[^^]+', 1, 1) v2_1
     , REGEXP_SUBSTR(REGEXP_SUBSTR(v, '[^-]+', 1, 2), '[^^]+', 1, 2) v2_2
     , REGEXP_SUBSTR(REGEXP_SUBSTR(v, '[^-]+', 1, 2), '[^^]+', 1, 3) v2_3
     , REGEXP_SUBSTR(v, '[^-]+', 1, 3) v3
     , REGEXP_SUBSTR(v, '[^-]+', 1, 4) v4
  FROM t
;

 


by 스나이퍼 [2014.09.25 09:22:00]

와~~~~%^^

진심으로 감사드립니다.

'[^^]+' 는 생각지도 못했습니다.

감사드리고, 오늘도 즐거운 하루 보내십시오.

앞으로도 많은 조언 부탁드립니다.^^

 

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입