日期:2014-05-17  浏览次数:21126 次

varchr2(40) 与 number类型怎么才能判断是否想等?怎么格式化之后比较?
varchr2(40)     与   number类型怎么才能判断是否想等?


varchr2(40)   里面也是数字,不知道这两个类型要怎么格式化之后比较?
只判断整数部分是否相同

------解决方案--------------------
SQL> select * from test;

未选定行

SQL> insert into test values(1, '1.2 ');

已创建 1 行。

SQL> insert into test values(2, '2 ');

已创建 1 行。

SQL> insert into test values(2, '2.0 ');

已创建 1 行。

SQL> insert into test values(3, '3.7 ');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from test;

ID NAME
---------- ----------
1 1.2
2 2
2 2.0
3 3.7

SQL> select * from test where id=name;

ID NAME
---------- ----------
2 2
2 2.0

SQL> select * from test id = to_number(name);
select * from test id = to_number(name)
*
ERROR 位于第 1 行:
ORA-00933: SQL 命令未正确结束


SQL> select * from test where id = to_number(name);

ID NAME
---------- ----------
2 2
2 2.0

SQL> select * from test where id= trunc(to_number(name));

ID NAME
---------- ----------
1 1.2
2 2
2 2.0
3 3.7

SQL>
------解决方案--------------------
比较的时候 oracle 默认会进行类型转换

SQL> select num1,
2 num2,
3 case
4 when decode(instr(num1, '. '),
5 0,
6 num1,
7 substr(num1, 0, instr(num1, '. ') - 1)) = trunc(num2) then
8 '== '
9 else
10 ' <> '
11 end
12 from t1
13 ;

NUM1 NUM2 CASEWHENDECODE(INSTR(NUM1, '. ')
------------ --------------------- ------------------------------
3.251201 3 ==
3.251201 3 ==
3.251201 3 ==
354401 3 <>
354401 354401 ==
------解决方案--------------------
number强行转化为char

to_char(number)
------解决方案--------------------
to_number()