Reputation: 616
I'm having an issue regarding SUBSTR function.
Imagine the table (TABLE1):
ABC_DEF DESCRIPTION
-------- -------------
0999 TEST INFO
If I do this query:
SELECT * FROM TABLE1
WHERE
(
ABC_DEF = '0999'
)
I get this results:
ABC_DEF DESCRIPTION
-------- -------------
0999 TEST INFO
However if I do this:
SELECT * FROM TABLE1
WHERE
(
ABC_DEF = SUBSTR('00000999', 5, 4)
)
I get 0 results. I don't understand the behavior at all. The attribute ABC_DEF is a char(8).
Upvotes: 2
Views: 4352
Reputation: 167877
A CHAR(8)
column will right-pad the value with space (CHR(32)
) characters until it has a length of 8.
Oracle 11g R2 Schema Setup:
CREATE TABLE table1 ( ABC_DEF CHAR(8), DESCRIPTION VARCHAR2(20) );
INSERT INTO table1 VALUES ( '0999', 'TEST INFO' );
Query 1:
SELECT * FROM TABLE1
WHERE ABC_DEF = '0999'
| ABC_DEF | DESCRIPTION |
|----------|-------------|
| 0999 | TEST INFO |
Query 2:
SELECT * FROM TABLE1
WHERE ABC_DEF = SUBSTR('00000999', 5, 4)
Query 3:
SELECT * FROM TABLE1
WHERE ABC_DEF = RPAD( SUBSTR('00000999', 5, 4), 8, ' ' )
| ABC_DEF | DESCRIPTION |
|----------|-------------|
| 0999 | TEST INFO |
Upvotes: 6