1,000.000원 * 20개 * 30%
1.000.000원
위 두개의 데이터 숫자만 입력 되어 있거나 산식으로 입력되어 있는 경우
계산을 해서 리턴을 해주고 숫자만 입력되어 있는경우 숫자만 리턴해 줄 수 있는 방법이 있나요?
아래처럼 리눅스의 eval 명령과 유사한 기능을 하는 함수를 만들어서 사용하는 방법이 있습니다.
쿼리로만 가능할지는 모르겠네요. 문자열에 '원, 개, %'가 들어가면 아마 전처리를 해야할 듯 합니다.
출처 : http://hidowb.blogspot.com/2008/05/eval-function.html
create or replace function eval (expr varchar2)
return varchar2
as
ret varchar2(4000);
begin
execute immediate 'begin :result := ' || expr || '; end;'
using out ret;
return ret;
end;
** 테스트
with t as (
select '1000000 * 20 * 0.3 ' c1 from dual
union all select '1000000' from dual
)
select eval (c1) from t
EVAL(C1)
--------------------------------------------------------------------------------
6000000
1000000
WITH t AS ( SELECT '1,000.000원 * 20개 * 30%' x FROM dual UNION ALL SELECT '1.000.000원' FROM dual ) SELECT x , y , TO_NUMBER( dbms_xmlgen.getxmltype('SELECT ' || y || ' FROM dual').Extract('//text()') ) z FROM (SELECT x , REGEXP_REPLACE(REPLACE(x, '%', '/100'), '[^0-9()*/+-]') y FROM t ) ;
함수보다 마농님의 쿼리를 사용하시는 게 더 나아 보이네요~~