혹시 다음의 데이터를 SQL 로 다음의 결과물을 출력 할 수 있을까요..? 0 5 1,170

by 이티 [2014.09.15 13:36:52]


--데이터

SELECT 'DATA="ABC" DATA="DEF" DATA="GHI"' AS DATA FROM DUAL;

 

데이터에 DATA에 해당하는부분은 가변길이입니다.

 

--결과

[DATA]
====
'ABC'
'DEF'
'GHI'

by 비니 [2014.09.15 14:00:46]

질문의 의도가 무엇인지 ??

SELECT 'DATA="ABC" DATA="DEF" DATA="GHI"' AS DATA FROM DUAL; 이 쿼리로 나오게 되는 값이

DATA="ABC" DATA="DEF" DATA="GHI"  입니다. 

뭐 실제 데이터가 저렇게 들어가있다 .. 는 말씀이고 . 

 

원하는 데이터는 저 위에 데이터를 

아래처럼 나오게 해달라고 하시는 건가요? 

[DATA]
====
'ABC'
'DEF'
'GHI'

 

 


by 비니 [2014.09.15 14:02:01]

원본 데이터의 포멧이랑 

쿼리로 원하는 결과값을 예로 들어주셔야 정확한 답변이 달릴것 같습니다만. 

 

 


by 이티 [2014.09.15 14:11:54]

비니님 첫 댓글에 대한 해석이 맞구요.

핵심을 말씀드리자면 필드와 행이 하나뿐인 SQL 을 세로SQL로 가변적으로 풀 수 있냐는 질문입니다.

단, 과정속에서 DATA에 들어가 있는 문자열값을 가변길이인것을 고려해서

해당 카운트만큼의 로우가 생성되며 각각의 다른 데이터를 출력 할 수 있는가에 대한 질문이기도 합니다.


by DarkBee [2014.09.15 14:27:16]


WITH t AS
(
  SELECT 'DATA="ABC" DATA="DEF" DATA="GHI"' AS data FROM DUAL
)
SELECT REGEXP_SUBSTR ( data, '[^"]+', 1, LEVEL * 2 ) data
  FROM t
CONNECT BY LEVEL <= ( SELECT REGEXP_COUNT ( data, 'DATA=' ) FROM t )

 


by 이티 [2014.09.15 14:40:16]

와우 답변 감사합니다!

제가 원하는 답변입니다!

제가 사용은 10g를 사용하므로 REGEXP_COUNT 를 못써서 10g 용으로 조금 변환하여 해결 하였습니다.

소중한 답변 잘 응용하도록 하겠습니다. 감사합니다. (__) 꾸벅

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