问题
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'
回答1:
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)
来源:https://stackoverflow.com/questions/23083054/best-way-to-compare-varchar2-with-char