Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Để trích xuất các chuỗi cụ thể từ chuỗi đã cho trong Oracle

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
  • (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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao mệnh đề IN oracle chỉ có giới hạn 1000 đối với dữ liệu tĩnh?

  2. Sự khác biệt giữa hai ngày trong sql

  3. thu thập dữ liệu tổng hợp hàng năm để truy cập nhanh sau này

  4. Cách mã hóa dữ liệu trong Oracle bằng PL SQL

  5. Làm thế nào để đệm các số 0 cho một trường số?