甲骨文 | 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。
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'
| ABC_DEF | DESCRIPTION |
|----------|-------------|
| 0999 | TEST INFO |
查询 2:
SELECT * FROM TABLE1
WHERE ABC_DEF = SUBSTR('00000999', 5, 4)
查询 3:
SELECT * FROM TABLE1
WHERE ABC_DEF = RPAD( SUBSTR('00000999', 5, 4), 8, ' ' )
| ABC_DEF | DESCRIPTION |
|----------|-------------|
| 0999 | TEST INFO |
我有一个关于 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。
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'
| ABC_DEF | DESCRIPTION |
|----------|-------------|
| 0999 | TEST INFO |
查询 2:
SELECT * FROM TABLE1
WHERE ABC_DEF = SUBSTR('00000999', 5, 4)
查询 3:
SELECT * FROM TABLE1
WHERE ABC_DEF = RPAD( SUBSTR('00000999', 5, 4), 8, ' ' )
| ABC_DEF | DESCRIPTION |
|----------|-------------|
| 0999 | TEST INFO |