我有关于SUBSTR功能的问题.
想象一下表(TABLE1):
ABC_DEF DESCRIPTION
-------- -------------
0999 TEST INFO
Run Code Online (Sandbox Code Playgroud)
如果我这样查询:
SELECT * FROM TABLE1
WHERE
(
ABC_DEF = '0999'
)
Run Code Online (Sandbox Code Playgroud)
我得到了这个结果:
ABC_DEF DESCRIPTION
-------- -------------
0999 TEST INFO
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做:
SELECT * FROM TABLE1
WHERE
(
ABC_DEF = SUBSTR('00000999', 5, 4)
)
Run Code Online (Sandbox Code Playgroud)
我得到0结果.我根本不明白这种行为.属性ABC_DEF是char(8).
甲CHAR(8)列将右垫与空间的值(CHR(32))字符,直到它具有8的长度.
Oracle 11g R2架构设置:
CREATE TABLE table1 ( ABC_DEF CHAR(8), DESCRIPTION VARCHAR2(20) );
INSERT INTO table1 VALUES ( '0999', 'TEST INFO' );
Run Code Online (Sandbox Code Playgroud)
查询1:
SELECT * FROM TABLE1
WHERE ABC_DEF = '0999'
Run Code Online (Sandbox Code Playgroud)
结果:
| ABC_DEF | DESCRIPTION |
|----------|-------------|
| 0999 | TEST INFO |
Run Code Online (Sandbox Code Playgroud)
查询2:
SELECT * FROM TABLE1
WHERE ABC_DEF = SUBSTR('00000999', 5, 4)
Run Code Online (Sandbox Code Playgroud)
结果:
问题3:
SELECT * FROM TABLE1
WHERE ABC_DEF = RPAD( SUBSTR('00000999', 5, 4), 8, ' ' )
Run Code Online (Sandbox Code Playgroud)
结果:
| ABC_DEF | DESCRIPTION |
|----------|-------------|
| 0999 | TEST INFO |
Run Code Online (Sandbox Code Playgroud)