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

Cách lấy chuỗi thứ n trong bất kỳ từ hoặc câu chung chung nào có dấu phân cách

Bằng cách sử dụng instr .

select substr(help, 1, instr(help,' ') - 1)
  from ( select 'hello my name is...' as help
           from dual )

instr(help,' ') trả về chỉ mục vị trí của lần xuất hiện đầu tiên của đối số thứ hai trong đối số đầu tiên, bao gồm chuỗi bạn đang tìm kiếm. tức là lần xuất hiện đầu tiên của ' ' trong chuỗi 'hello my name is...' cộng với không gian.

substr(help, 1, instr(help,' ') - 1) sau đó lấy chuỗi đầu vào từ ký tự đầu tiên đến chỉ mục được chỉ ra trong instr(... . Sau đó, tôi xóa một cái để không có dung lượng ..

Đối với lần xuất hiện thứ n, chỉ cần thay đổi điều này một chút:

instr(help,' ',1,n) thứ n sự xuất hiện của ' ' từ ký tự đầu tiên. Sau đó, bạn cần tìm chỉ mục vị trí của chỉ mục tiếp theo instr(help,' ',1,n + 1) , cuối cùng hãy tìm ra sự khác biệt giữa chúng để bạn biết mình phải đi bao xa trong substr(... . Khi bạn đang tìm kiếm thứ n , khi n là 1 điều này bị hỏng và bạn phải xử lý nó, như sau:

select substr( help
             , decode( n
                     , 1, 1
                     , instr(help, ' ', 1, n - 1) + 1
                       )
             , decode( &1
                     , 1, instr(help, ' ', 1, n ) - 1
                     , instr(help, ' ', 1, n) - instr(help, ' ', 1, n - 1) - 1
                       )
               )
  from ( select 'hello my name is...' as help
           from dual )

Điều này cũng sẽ bị phá vỡ ở n . Như bạn có thể thấy, điều này đang trở nên vô lý, vì vậy bạn có thể muốn xem xét sử dụng regular expressions

select regexp_substr(help, '[^[:space:]]+', 1, n )
  from ( select 'hello my name is...' as help
           from dual )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TNS-12519 w / o Đã đạt được các quy trình tối đa

  2. Làm thế nào để lưu trữ kết quả của một hàm sẽ trả về sysrefcursor?

  3. Ràng buộc sử dụng DATE

  4. Làm cách nào để xuất kết quả truy vấn sang Excel trong Oracle SQL Developer?

  5. Làm cách nào để kiểm tra xem một cột có tồn tại hay không trước khi thêm nó vào bảng hiện có trong PL / SQL?