문자 '000-1200'을 숫자 -1200으로 인식하게 하는 방법 없을까요? 0 6 2,781

by 유정완 [SQL Query] [2010.03.04 18:05:27]



 SELECT to_NUMBER('000-1200')  FROM DUAL;
--> 수치가 부적합 합니다 라고 에러 납니다

문자 '000-1200'을 숫자 -1200으로 인식하게 하는 방법 없을까요?

by Kai [2010.03.04 18:42:16]
앞에 3자리를 빼고 계산하는거면
SELECT TO_NUMBER( SUBSTR( '000-1200' , 4 )) FROM DUAL
이런식으로 하면되는데요.

혹시 000 빼기 1200 처럼 수식을 적으신건가요?

넘어 오는 값에 대한 설명이 부족하네요~


by 부쉬맨 [2010.03.04 20:05:13]
to_number인데 안에 값중 숫자가 아닌 값 - 이들어가서 생긴에러입니다.
(문자 '000-1200'을 숫자 -1200으로 인식하게 하는 방법 없을까요? )
라고 하는건 설명자체가 너무 부족합니다.


by 웅 [2010.03.05 10:43:31]
이유는 부쉬맨님께서 잘 설명해주셨고요.
원하시는 것은 이런 식이 아닐까 생각되네요.
한개의 연산자가 반드시 들어온다는 가정하에

with t as (
select '000-12000' A from dual union all
select '000+12000' A from dual union all
select '000*12000' A from dual union all
select '000/12000' A from dual union all
select '001*12000' A from dual union all
select '/12000' A from dual
)
select substr(a,1,op-1)
, substr(a,op,1)
, substr(a,op+1)
, case when substr(a,op,1) = '+' then nvl(substr(a,1,op-1),0) + nvl(substr(a,op+1),0)
when substr(a,op,1) = '-' then nvl(substr(a,1,op-1),0) - nvl(substr(a,op+1),0)
when substr(a,op,1) = '*' then nvl(substr(a,1,op-1),1) * nvl(substr(a,op+1),1)
when substr(a,op,1) = '/' then nvl(substr(a,1,op-1),0) / nvl(substr(a,op+1),1)
else 0 --연산자가 없다면 에러 0
end rslt
from (select t.*
, instr(a,'-',1,1) + instr(a,'+',1,1) + instr(a,'*',1,1) + instr(a,'/',1,1) op
from t)

by 웅 [2010.03.05 10:47:06]
단 입력값이 '000-1200'포맷을 유지해야 제대로 값이 나오겠죠?

by 유정완 [2010.05.07 16:56:26]
'0000-1200', '00000-1200' 포맷이 불규칙 할때는 사용할 수 없겠네요

by 유정완 [2010.05.10 15:02:14]
WITH TAB
AS
(
select '000-12000' Addr from dual
)
select case when chk > 0 then '-' || bb else bb end from (
SELECT ADDR
, instr( Addr, '-') chk
, REGEXP_SUBSTR(ADDR,'[^-]+', 1, 1) aa
, REGEXP_SUBSTR(ADDR,'[^-]+', 1, 2) bb
FROM TAB
)
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입