我正在寻找将 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'
最佳答案
如 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)
关于oracle - 比较 VARCHAR2 与 CHAR 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23083054/