2014-09-15 5 views
0

Oracle SQL을 사용하고 있습니다. 나는 String 유형의 값이있는 열을 가지고 있는데 실제로 통화라고 생각합니다.문자열을 통화 값으로 변환합니다.

문자열 값의 형식은 다음과 같습니다

103,2 % 

나는로 변환해야합니다

103.2 

알도 내가 값이 Float에 입력 변환해야합니다.

나를 도울 수있는 좋은 대화 기능이 있습니까? 내가 Replace() 기능으로 그렇게해야합니까?

+0

'% '는 리터럴 문자입니까, 아니면 통화 기호에 와일드 카드로 사용하고 있습니까? –

답변

2

어때?

select cast(translate(col, ', %', '.') as float) 
+0

감사합니다. 나는 그 순간에 충분하다고 생각한다. – Omri

1

당신은 103,2103,2 %을 변경 고정 % 부분을 밖으로 제거하는 replace을 사용할 수 있습니다; 그 결과를 to_number()에 전달합니다. 당신은, 데이타베이스의 값과 기간에 쉼표 소수 separtator을 갖고있는 것 같다 있기 때문에 당신은 NLS_NUMERIC_CHARACTERS을 지정할 수 있습니다

select to_number(replace('103,2 %', ' %'), 
    '999999D99', 'NLS_NUMERIC_CHARACTERS='',.''') as value 
from dual; 

    VALUE 
---------- 
    103.2 

당신은 확실히 고정 된 형식이없는 경우 - 공간은 나에 대한 존재하지 않을 수 있습니다 당신은 문자열 숫자로 변환 할 수 있습니다

select to_number(regexp_replace('103,2 %', '[^[:digit:],]'), 
    '999999D99', 'NLS_NUMERIC_CHARACTERS='',.''') as value 
from dual; 
+0

설명 주셔서 감사합니다! – Omri

0

: 고든 리노 프는 켰을 때, 다음 translate을 사용할 수 있습니다, 또는 숫자가 아닌 문자를 제거하는 정규 표현식을 사용 - 예, 또는 서로 다른 통화 기호 대신 %를 가질 수 CAST(string AS DECIMAL) 또는 CAST(string AS SIGNED INTEGER)

0을 사용하여 값
+0

공백과 '%'(리터럴이든 와일드 카드이든간에) ORA-01722를 사용하면 캐스트가 실패합니다. OP는 대답을 정수가 아닌 부동 소수점으로 원합니다. –

관련 문제