경우의 데이터 추출 방법 0 4 870

by 비컴트루 [Oracle 기초] [2014.07.08 08:58:41]


예를 들어서 number이라는 컬럼에  201401010123456 이라는 값과 201401015135678 이라는 데이터가 있다고 가정을 하겠습니다.

 

여기서 뒤에나오는 숫자중 날짜인 20140101 다음 첫숫자  0, 5는 상태를 나타내는 값이라고 보고 많은 데이터 중에서 어떤 것은 0번으로 어떤것은 앞에 5가 온다음 다른 번호가 있다고 가정을 했을때요...

 

제가 알고 싶은 점은요..   select로 조회를 했을때, substr 함수로 짜를겁니다.. 날짜 부분을요...

그럴때, 앞에  자리수는 같다고 보고 substr을 하게되면 뒤의 값의 경우는 5로 시작하는 숫자일테고(5135678),

앞의 숫자는 (0123456)이렇게 되겠죠....

 

앞의 숫자가 0으로 시작할때 0을 제외하려면 어떻게 해야 할지 망설이고 있습니다.

제가 알고 싶은 자료는 앞의 숫자는 123456, 뒤의 숫자는 5135678

substr한 다음에 제일 앞 숫자가 0이면 버리고, 5라면 그대로 둬야 한다면... 어떻게 해야 하나요?

이렇게 구하고 싶습니다.. case함수를 써야할지, if 함수를 써야할지 궁금한데요...

 

고수분들께서 팁을 주셨으면 좋겠습니다...  감사합니다.   즐거운 하루 되십시요...^^

 

by 마농 [2014.07.08 09:42:49]
WITH t AS
(
SELECT '201401010123456' v FROM dual
UNION ALL SELECT '201401015135678' FROM dual
)
SELECT v
     , SUBSTR(v, 9)             v0 -- 문자값(좌측 8자리 제거)
     , LTRIM(SUBSTR(v, 9), '0') v1 -- 문자값(좌측 0 제거)
     , TO_NUMBER(SUBSTR(v, 9))  n1 -- 숫자값(숫자로 변경)
     , MOD(v, 10000000)         n2 -- 숫자값(10000000 으로 나눈 나머지)
     , MOD(v, 1E7)              n3 -- 숫자값(10^7 으로 나눈 나머지)
  FROM t
;

 


by 비컴트루 [2014.07.08 10:02:55]

 

마농님 감사합니다..  조언 주신대로 쿼리를 해보겠습니다.

어떻게 할지 몰라 멘붕이었는데, 덕분에 데이터 처리를 잘 할 수 있을 것 같습니다.

 

저 죄송한 말씀인데.. 9번째 줄 까지는 무슨 내용인지 이해했는데, 10번째 줄과 11번째 줄의

내용은 왜 필요한지 모르겠는데요...   (옆에 코멘트를 달아 주셨지만,   이해가 안됩니다.. ^^;)

mod는 나머지를 구할 때 쓰는 함수로 알고 있는데 , 저는 왜 이부분이 추가되어야 하는지

이해를 못하고 있습니다..

 

간단하게 왜 저 부분이 들어가야 하는지 설명 부탁드려도 될런지요..

 

 

조언 감사드립니다..  즐거운 하루 되세요...

 


by 마농 [2014.07.08 10:28:42]

201401010123456 를 10000000 으로 나누면
몫은 20140101 이고 나머지는 123456 이죠.

동일 결과를 내는 여러가지 다양한 방법을 알려드린거에요.

원하는 결과값이 문자인지 숫자인지도 판단하셔야 합니다.

문자를 원한다면 LTRIM 쓰시고, 숫자를 원하신다면 나머지 방법들을 쓰시면 됩니다.


by 비컴트루 [2014.07.08 10:50:03]

감사합니다... 코멘트까지 달아주셨는데...  이해력이 부족해서  ^^;

자세한 조언 감사드립니다.

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