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

oracle中char(10)类型和number(11)类型
oracle中有两个表,一个表中的字段是char(10)类型的,另一个表中的字段是number(11)类型的,我想以这两个字段为关联关系把两个表连在一起,请问大侠们,能不能通过sql语句进行拼接来实现啊

------解决方案--------------------
SQL code

--可以
create table testa(
a number(11),
val varchar2(20));
create table testb(
a char(10),
val varchar2(20));
insert into testa values(1,'testa');
insert into testb values('1','testb');

select a.a,a.val aval,b.val bval
from testa a,testb b
where a.a=b.a;

------解决方案--------------------
SELECT * FROM A;
ID NAME
----- ----- 
1 1
2 2
3 3
4 4

SELECT * FROM B;
ID NAME
----- ----- 
1 1
2 2
3 3
4 4

SELECT * FROM A,B WHERE TO_CHAR(A.ID) = B.NAME;
ID NAME ID NAME
----------- ----------- 
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
------解决方案--------------------
oracle有隐式转换 不行的话 可以手动转换 to_number(aa)=bb 或 aa=to_char(bb) 2边都转换也行
------解决方案--------------------
SQL code

这个关联要发生数据类型的隐式转换,性能效率上来说比较低
可以把number类型转换成char的,注意char的10个长度,如果里面的值没有10个长度,会在后面补空字符的,补到10个长为止

可以这样写
select * from a full join b on b.char_file=rpad(a.number_file,10,'')