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

想象一下表( 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)。

最佳答案

CHAR(8)列将使用空格(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 |

关于oracle - 甲骨文| SUBSTR函数不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34400734/

10-09 06:21