我有5个字符串,可以有数字,小数点,字母和空格。如果字符串中的所有字符都是数字,我想将此字符串转换为数字(整数)。即。
提前致谢。
答案 0 :(得分:16)
在PL / SQL中使用To_Number Function将字符串转换为数字,例如见下文。
to_number('1210.73', '9999.99') would return the number 1210.73
to_number('546', '999') would return the number 546
to_number('23', '99') would return the number 23
编辑:
在PL / SQL中,您可以使用LENGTH,TRIM和TRANSLATE函数检查字符串是否由数字字符组成。
LENGTH(TRIM(TRANSLATE(string1, ' +-.0123456789', ' ')))
答案 1 :(得分:3)
to_number
函数将字符串转换为数字。
答案 2 :(得分:1)
create or replace function is_int(p_str in varchar2) return number as
begin
if regexp_instr(p_str, '^[[:space:]]*[[:digit:]]{1,5}[[:space:]]*$') > 0 then
return 1;
end if;
return 0;
end;
/
show errors
with strings as (
select '12345' as string from dual
union all
select '1234' as string from dual
union all
select '123' as string from dual
union all
select '12' as string from dual
union all
select '1' as string from dual
union all
select '01' as string from dual
union all
select '' as string from dual
union all
select ' 345' as string from dual
union all
select '123 ' as string from dual
union all
select '12.45' as string from dual
union all
select '12 45' as string from dual
union all
select '12,45' as string from dual
union all
select '-1234' as string from dual
union all
select '+1234' as string from dual
union all
select 'A2345' as string from dual
)
select testcase, to_number(string)
from strings
where is_int(string) = 1
;
TESTCASE TO_NUMBER(STRING)
---------- -----------------
1 12345
2 1234
3 123
4 12
5 1
6 1
8 345
9 123
8 rows selected.
create or replace function to_int(p_str in varchar2) return number as
begin
if regexp_instr(p_str, '^[[:space:]]*[[:digit:]]{1,5}[[:space:]]*$') > 0 then
return to_number(p_str);
end if;
return null;
end;
/
show errors
with strings as (
select 1 as testcase, '12345' as string from dual
union all
select 2, '1234' as string from dual
union all
select 3, '123' as string from dual
union all
select 4, '12' as string from dual
union all
select 5, '1' as string from dual
union all
select 6, '01' as string from dual
union all
select 7, '' as string from dual
union all
select 8, ' 345' as string from dual
union all
select 9, '123 ' as string from dual
union all
select 10, '12.45' as string from dual
union all
select 11, '12 45' as string from dual
union all
select 12, '12,45' as string from dual
union all
select 13, '-1234' as string from dual
union all
select 14, '+1234' as string from dual
union all
select 15, 'A2345' as string from dual
)
select testcase, '''' || string || '''' as string
from strings
where to_int(string) is not null
;
TESTCASE STRING
---------- ---------------------
1 '12345'
2 '1234'
3 '123'
4 '12'
5 '1'
6 '01'
8 ' 345'
9 '123 '
8 rows selected.
答案 3 :(得分:0)
您是否尝试过CAST(var AS NUMBER)?
答案 4 :(得分:0)
也可以试试这个
select floor(to_number(TRANSLATE(' +1234.34','+-',' '))) from dual;
假设+1234.34是输入
答案 5 :(得分:0)
假设您正在使用变量foo_code
IF TRIM(TRANSLATE(TRANSLATE(TRIM(foo_code), ' ', 'x'), '0123456789', ' ')) IS NULL THEN
foo_number := TO_NUMBER(foo_code);
END IF;
打破它: