数据库是 oracle 10g
例如下面一句(等号右边的字符串含有一串空格)
select 1 from dual where 'aaaa' = 'aaaa '
运行结果会有一条记录返回然而
select 1 from dual where trim('aaaa') = 'aaaa '
这样就没有记录返回
同样ltrim,rtrim,substr 都有这样的现象谁能说说为什么?
例如下面一句(等号右边的字符串含有一串空格)
select 1 from dual where 'aaaa' = 'aaaa '
运行结果会有一条记录返回然而
select 1 from dual where trim('aaaa') = 'aaaa '
这样就没有记录返回
同样ltrim,rtrim,substr 都有这样的现象谁能说说为什么?
然后作比较。
由于char类型不足位数本身就用空格补足,所以比较的时候相等。
相当于'aaaa '='aaaa '
但是加了trim以后,情况就不同了。
相当于'aaaa'='aaaa '所以结果不同。
select 1 from dual where 'aaaa' = 'aaaa '
是
SELECT STATEMENT, GOAL = CHOOSE
TABLE ACCESS FULL Object owner=SYS Object name=DUAL 而
select 1 from dual where trim('aaaa') = 'aaaa '
是
SELECT STATEMENT, GOAL = CHOOSE
FILTER
TABLE ACCESS FULL Object owner=SYS Object name=DUAL
根本不存在filter操作
在'aaaa' = 'aaaa ' 比较的时候,1位字长和4000个字长是相等的.
trim则要执行截取判定了。