我正在尝试检查oracle(10g)查询中的列中的值是否为数字以便进行比较.就像是:
select case when ( is_number(myTable.id) and (myTable.id >0) )
then 'Is a number greater than 0'
else 'it is not a number'
end as valuetype
from table myTable
Run Code Online (Sandbox Code Playgroud)
关于如何检查的任何想法?
我知道 Oracle(我正在开发 Oracle11gR2)可以隐式地将数据类型相互转换(如果它能够这样做的话)。例如,如果我尝试将数字插入 varchar 区域,它会隐式地将数字转换为 varchar,反之亦然,如果 varchar 是有效数字,则它会转换为数字。
Oracle 也在连接上执行这种隐式转换。如果我将数字列连接到 varchar 列,它会隐式地将 varchar 转换为数字并完成查询。但是,如果 varchar 列中存在任何无效数字,则会抛出一个错误。ORA-01722 : Invalid Number您可以通过运行以下代码来查看此设置:
create table test_1(
id varchar2(20),
val number);
create table test_2(
id number,
name varchar2(20)
);
insert into test_1 values ('abc', 10);
insert into test_1 values ('1', 11);
insert into test_2 values (1,'abc');
insert into test_2 values (2,'def');
-- Throw error
select
*
from
test_1, test_2
where
test_1.id = test_2.id
-- work
select
test_1.id, val, name
from
test_1, test_2
where …Run Code Online (Sandbox Code Playgroud)