select
SUBSTR(s, 1, INSTR(s, '-') - 1) as a,
SUBSTR(s, INSTR(s, '-', -1) + 1) as b
from
(select '[email protected]@BR12340000-990' as s from dual)
Sử dụng SUBSTR(string, start, length)
chúng ta có các đối số sau:
Đối với A:
- chuỗi để tìm kiếm
- 1 làm
start
và - (index_of_the_first_hyphen - 1) làm
length
.INSTR(string, searchfor)
cung cấp cho chúng tôi chỉ số của dấu gạch ngang đầu tiên
Đối với B:
Sử dụng SUBSTR(string, start)
chúng tôi có các đối số:
- chuỗi để tìm kiếm
- the (index_of_last_hyphen + 1) - lần này chúng tôi sử dụng
INSTR(string, searchfor, startindex)
đối sốstartindex
và đặt nó thành -1; điều này làm cho nó tìm kiếm từ cuối chuỗi và hoạt động ngược lại, cung cấp cho chúng tôi chỉ mục của dấu gạch ngang cuối cùng
Chúng ta không cần đối số độ dài - SUBSTR không có độ dài trả về phần còn lại của chuỗi về cuối
Điều quan trọng cần lưu ý là INSTR với chỉ mục bắt đầu là -1 sẽ tìm kiếm ngược nhưng nó luôn trả về chỉ mục từ đầu chuỗi chứ không phải cuối.
INSTR('dddde', 'd', -1)
12345 -- returns 4, because d is 4 from the start
54321 -- it does not return 2, even though d is 2 from the "start" when searching backwards