且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

比较VARCHAR2和CHAR的***方法

更新时间:2023-11-29 17:40:58

在为table1.value列建立索引时,您不想为了进行比较而对其进行操作,因为那样会阻止使用索引.因此,您需要修改要查找的值:

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将对您显示的查询进行隐式操作,并且仍将使用索引.和要连接表的情况相同,但是在连接过程中是填充还是修剪取决于驱动程序是哪个表:

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)

或者:

SELECT table1.ID
FROM table2
JOIN table1 ON table1.value = RPAD(table2.value, 12)