4

我正在寻找VARCHAR2(50 BYTE)CHAR(12 BYTE).

有两个数据库,第一个包含一个带有CHAR列的table1(下划线表示空格字符填充CHAR长度)

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

第二个数据库(table2)包含没有空格的 VARCHAR2。

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

所以,我想要这样的东西

SELECT table1.ID FROM table1 WHERE table1.VALUE = '123-45'
4

1 回答 1

6

由于该table1.value列已编入索引,因此您不希望对其进行操作以进行比较,因为这会阻止使用该索引。因此,您需要修改要查找的值:

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

Oracle 将使用您显示的查询隐式执行此操作,并且仍将使用索引。如果您要加入表,则相同,但在加入期间是否填充或修剪取决于哪个表是驱动程序:

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

或者:

SELECT table1.ID
FROM table2
JOIN table1 ON table1.value = RPAD(table2.value, 12)
于 2014-04-15T12:12:30.980 回答