首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

一个oracle字符处理函数的简单有关问题

2012-04-03 
一个oracle字符处理函数的简单问题数据库是oracle10g例如下面一句(等号右边的字符串含有一串空格)select1f

一个oracle字符处理函数的简单问题
数据库是   oracle   10g
例如下面一句(等号右边的字符串含有一串空格)
select   1   from   dual   where   'aaaa '   =   'aaaa               '  
运行结果会有一条记录返回

然而
select   1   from   dual   where   trim( 'aaaa ')   =   'aaaa               '  
这样就没有记录返回
同样ltrim,rtrim,substr   都有这样的现象

谁能说说为什么?


[解决办法]
trim当然是去掉空格了嘛
[解决办法]
我觉得是oracle先针对 'aaaa '和 'aaaa '生成了对应的类似char类型的定长字符串。
然后作比较。
由于char类型不足位数本身就用空格补足,所以比较的时候相等。
相当于 'aaaa '= 'aaaa '
但是加了trim以后,情况就不同了。
相当于 'aaaa '= 'aaaa '所以结果不同。
[解决办法]
似乎是oracle的bug,看了一下执行计划,
select 1 from dual where 'aaaa ' = 'aaaa '

SELECT STATEMENT, GOAL = CHOOSE
TABLE ACCESS FULLObject owner=SYSObject name=DUAL


select 1 from dual where trim( 'aaaa ') = 'aaaa '

SELECT STATEMENT, GOAL = CHOOSE
FILTER
TABLE ACCESS FULLObject owner=SYSObject name=DUAL
根本不存在filter操作
[解决办法]
我同意doer_ljy(可战) 的观点!
在 'aaaa ' = 'aaaa ' 比较的时候,1位字长和4000个字长是相等的.
trim则要执行截取判定了。

热点排行