Oracle SQL을 사용하고 있습니다. 나는 String
유형의 값이있는 열을 가지고 있는데 실제로 통화라고 생각합니다.문자열을 통화 값으로 변환합니다.
문자열 값의 형식은 다음과 같습니다
103,2 %
나는로 변환해야합니다
103.2
알도 내가 값이 Float
에 입력 변환해야합니다.
나를 도울 수있는 좋은 대화 기능이 있습니까? 내가 Replace()
기능으로 그렇게해야합니까?
Oracle SQL을 사용하고 있습니다. 나는 String
유형의 값이있는 열을 가지고 있는데 실제로 통화라고 생각합니다.문자열을 통화 값으로 변환합니다.
문자열 값의 형식은 다음과 같습니다
103,2 %
나는로 변환해야합니다
103.2
알도 내가 값이 Float
에 입력 변환해야합니다.
나를 도울 수있는 좋은 대화 기능이 있습니까? 내가 Replace()
기능으로 그렇게해야합니까?
당신은 103,2
에 103,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;
설명 주셔서 감사합니다! – Omri
: 고든 리노 프는 켰을 때, 다음 translate
을 사용할 수 있습니다, 또는 숫자가 아닌 문자를 제거하는 정규 표현식을 사용 - 예, 또는 서로 다른 통화 기호 대신 %를 가질 수 CAST(string AS DECIMAL)
또는 CAST(string AS SIGNED INTEGER)
공백과 '%'(리터럴이든 와일드 카드이든간에) ORA-01722를 사용하면 캐스트가 실패합니다. OP는 대답을 정수가 아닌 부동 소수점으로 원합니다. –
'% '는 리터럴 문자입니까, 아니면 통화 기호에 와일드 카드로 사용하고 있습니까? –