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()