甲骨文 | SUBSTR 函数不起作用

ORACLE | SUBSTR function not working

我有一个关于 SUBSTR 函数的问题。

想象一下 table (TABLE1):

ABC_DEF   DESCRIPTION
--------  -------------
0999      TEST INFO

如果我执行此查询:

SELECT * FROM TABLE1 
WHERE 
(
     ABC_DEF = '0999'
)

我得到这个结果:

ABC_DEF   DESCRIPTION
--------  -------------
0999      TEST INFO

但是如果我这样做:

SELECT * FROM TABLE1 
WHERE 
(
     ABC_DEF = SUBSTR('00000999', 5, 4)
)

我得到 0 个结果。我根本不理解这种行为。属性 ABC_DEF 是一个 char(8).

A CHAR(8) 列将用 space (CHR(32)) 个字符向右填充值,直到它的长度为 8。

SQL Fiddle

Oracle 11g R2 架构设置:

CREATE TABLE table1 ( ABC_DEF CHAR(8), DESCRIPTION VARCHAR2(20) );

INSERT INTO table1 VALUES ( '0999', 'TEST INFO' );

查询 1:

SELECT * FROM TABLE1 
WHERE ABC_DEF = '0999'

Results:

|  ABC_DEF | DESCRIPTION |
|----------|-------------|
| 0999     |   TEST INFO |

查询 2:

SELECT * FROM TABLE1 
WHERE ABC_DEF = SUBSTR('00000999', 5, 4)

Results:

查询 3:

SELECT * FROM TABLE1 
WHERE ABC_DEF = RPAD( SUBSTR('00000999', 5, 4), 8, ' ' )

Results:

|  ABC_DEF | DESCRIPTION |
|----------|-------------|
| 0999     |   TEST INFO |