我有一个关于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/