oracle - 比较 VARCHAR2 与 CHAR 的最佳方式

标签 oracle char comparison varchar2

我正在寻找将 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/

相关文章:

oracle - 使用sql将行转换为列,反之亦然 - oracle

mysql - 选择另一个 RDBMS

java - 将字符串与数组列表中的字符串的一部分进行比较

python - 为什么对于 Euler 50 的等效解决方案,Clojure 比 Python 慢 10 倍?

ruby - 为什么 [1..5] == [1,2,3,4,5] 不是?

oracle - 通过 slick 处理 Oracle 中的自动 inc 列

database - 如何找出 Oracle 10g 中哪些表访问最多或使用最频繁

c++ - 作为 char* 传递后获取数组的长度

Java 将 int 转换为 char 不起作用

c++ - 'strcpy' : cannot convert parameter 2 from 'WCHAR *' to 'const char *