Dưới dạng table1.value
được lập chỉ mục, bạn không muốn thao tác điều đó để so sánh vì điều đó sẽ ngăn chỉ mục được sử dụng. Vì vậy, bạn sẽ cần sửa đổi giá trị mà bạn đang tìm kiếm:
SELECT table1.ID FROM table1 WHERE table1.VALUE = RPAD('123-45', 12)
Oracle sẽ thực hiện điều đó một cách ngầm định với truy vấn mà bạn đã hiển thị và sẽ vẫn sử dụng chỉ mục. Và điều tương tự nếu bạn đang tham gia các bảng, nhưng việc bạn đệm hoặc cắt trong quá trình tham gia phụ thuộc vào bảng nào là trình điều khiển:
SELECT table1.ID, table2.ID
FROM table1
JOIN table2 ON table2.value = RTRIM(table1.value)
WHERE table1.VALUE = RPAD('123-45', 12)
Hoặc:
SELECT table1.ID
FROM table2
JOIN table1 ON table1.value = RPAD(table2.value, 12)