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

Cách tìm nạp chuỗi nhiều đối sánh bằng biểu thức chính quy

Nếu bạn muốn tất cả những thứ này dưới dạng một chuỗi duy nhất trong một hàng chúng không cần sử dụng biểu thức chính quy, bạn có thể sử dụng một tiêu chuẩn REPLACE() :

SQL> select replace('2711393|2711441|1234567', '|', ', ') from dual;

REPLACE('2711393|2711441|
-------------------------
2711393, 2711441, 1234567

Nếu bạn muốn tất cả những thứ này trong một cột duy nhất thì bạn cần sử dụng CONNECT BY như tôi chứng minh tại đây . Xin lưu ý rằng điều này rất kém hiệu quả.

SQL>  select regexp_substr('2711393|2711441|1234567', '[^|]+', 1, level)
  2     from dual
  3  connect by regexp_substr('2711393|2711441|1234567'
  4                           , '[^|]+', 1, level) is not null;

REGEXP_SUBSTR('2711393|2711441|1234567','[^|]+',1,LEVEL)
--------------------------------------------------------------------------

2711393
2711441
1234567

SQL>

Nếu bạn muốn những điều này trong các cột khác nhau, bạn cần sử dụng PIVOT và bạn sẽ cần biết mình có bao nhiêu. Tôi giả định là 3.

SQL> select *
  2    from (
  3   select regexp_substr('2711393|2711441|1234567', '[^|]+', 1, level) as a
  4        , level as lvl
  5     from dual
  6  connect by regexp_substr('2711393|2711441|1234567'
  7                           , '[^|]+', 1, level) is not null
  8          )
  9   pivot ( max(a)
 10          for lvl in (1,2,3)
 11          )
 12         ;

1          2          3
---------- ---------- ----------
2711393    2711441    1234567

SQL>

Như bạn có thể thấy, tất cả những thứ này đều hoàn toàn khủng khiếp và, hãy cứu cái đầu tiên, rất kém hiệu quả. Bạn nên chuẩn hóa cơ sở dữ liệu của mình một cách chính xác để đảm bảo bạn không phải làm điều này.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tôi có thể chèn nhiều hàng vào oracle với một giá trị thứ tự?

  2. Tìm nạp lười biếng trong MyBatis

  3. Làm thế nào để liệt kê tất cả các thủ tục được lưu trữ trong cơ sở dữ liệu Oracle

  4. Làm thế nào để in kết quả trong một dòng khác nhau bằng cách sử dụng truy vấn SQL?

  5. bao nhiêu CPU một phiên tiêu thụ tại một thời điểm nhất định trong oracle