Domanda

I'm searching for the best (and fastest) way to compare VARCHAR2(50 BYTE) with CHAR(12 BYTE).

There are two databases, first contains a table1 with CHAR column (underline means space characters to fill CHAR length)

ID  VALUE
1   123-45___
2   123-456__
3   123-457__

second database (table2) contains VARCHAR2 without white space.

ID  VALUE
4   123-45
5   123-456
6   123-457

So, I want something like this

SELECT table1.ID FROM table1 WHERE table1.VALUE = '123-45'
È stato utile?

Soluzione

As the table1.value column is indexed, you don't want to manipulate that for the comparison as that would prevent the index being used. So you'll need to modify the value you're looking up:

SELECT table1.ID FROM table1 WHERE table1.VALUE = RPAD('123-45', 12)

Oracle will do that implicitly with the query you showed though, and will still use the index. And the same if you're joining the tables, but whether you pad or trim during the join depends on which table is the driver:

SELECT table1.ID, table2.ID
FROM table1
JOIN table2 ON table2.value = RTRIM(table1.value)
WHERE table1.VALUE = RPAD('123-45', 12)

Or:

SELECT table1.ID
FROM table2
JOIN table1 ON table1.value = RPAD(table2.value, 12)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top