JaM*_*ing 4 oracle comparison char varchar2
我在寻找最好的,最快的方式来比较VARCHAR2(50 BYTE)
同CHAR(12 BYTE)
.
有两个数据库,第一个包含带有CHAR列的table1(下划线表示填充CHAR长度的空格字符)
ID VALUE
1 123-45___
2 123-456__
3 123-457__
Run Code Online (Sandbox Code Playgroud)
第二个数据库(table2)包含没有空格的VARCHAR2.
ID VALUE
4 123-45
5 123-456
6 123-457
Run Code Online (Sandbox Code Playgroud)
所以,我想要这样的东西
SELECT table1.ID FROM table1 WHERE table1.VALUE = '123-45'
Run Code Online (Sandbox Code Playgroud)
由于table1.value
列已编制索引,因此您不希望将其用于比较,因为这会阻止使用索引.所以你需要修改你正在查找的值:
SELECT table1.ID FROM table1 WHERE table1.VALUE = RPAD('123-45', 12)
Run Code Online (Sandbox Code Playgroud)
Oracle将使用您显示的查询隐式执行此操作,并仍将使用索引.如果您正在加入表格,那么相同,但是在连接期间是否填充或修剪取决于驱动程序是哪个表:
SELECT table1.ID, table2.ID
FROM table1
JOIN table2 ON table2.value = RTRIM(table1.value)
WHERE table1.VALUE = RPAD('123-45', 12)
Run Code Online (Sandbox Code Playgroud)
要么:
SELECT table1.ID
FROM table2
JOIN table1 ON table1.value = RPAD(table2.value, 12)
Run Code Online (Sandbox Code Playgroud)