create table tt(A1 CHAR(2) , A2 VARCHAR2(2)) ;
INSERT INTO TT VALUES('A','A') ;
insert into tt values('A','A ') ;
COMMIT ;
select rowid,a1,a2 from tt;
select length(a1),length(a2) from tt;
select rowid,a1,a2 from tt where a1='A' ; --把常量A后面加上空格,然后和A1比较,char规则
select rowid,a1,a2 from tt where a1='A ' ;--把常量A后面去掉1空格,然后和A1比较,char规则
select rowid,a1,a2 from tt where a2='A' ;-- 直接比较,varchar2规则
select rowid,a1,a2 from tt where a2='A ' ;-- 直接比较,varchar2规则
select rowid,a1,a2 from tt where a1=a2 ; -- 只能匹配一条结果,按照varchar2规则
select rowid,decode(a1,'A','AAAA','BBBB') FROM TT ; -- 函数 此时把常量A按照varchar2规则比较,没有匹配结果
select rowid,decode(a1,'A ','AAAA','BBBB') FROM TT ;-- 函数 此时把常量A按照varchar2规则比较,没有匹配结果
select rowid,case a1 when 'A' then 'AAA' else 'BBB' end from tt ; -- 表达式 此时把常量A按照char规则比较
select rowid,case a1 when 'A ' then 'AAA' else 'BBB' end from tt ;-- 表达式 此时把常量A按照char规则比较
select rowid,case a2 when 'A' then 'AAA' else 'BBB' end from tt ;
总结,char与常量比较时,按照char 规则,把常量后补充空格比较。
char与varchar2比较时,按照varchar2规则。
char用函数时,按照varchar2 规则,与表达式case比较时,按照char规则。
char与表达式minus ,intersect时,按照varchar2规则,如:
create table t1(name char(10)) ;
create table t2(name char(20)) ;
begin
for i in 1..5 loop
insert into t1 values(i) ;
insert into t2 values(i) ;
end loop ;
commit;
end ;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12961536/viewspace-769575/
,如需转载,请注明出处,否则将追究法律责任。