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

Chia chuỗi thành hàng Oracle SQL

Điều này sẽ thực hiện thủ thuật:

SELECT DISTINCT ID, regexp_substr("Strings", '[^ ]+', 1, LEVEL)
FROM T
CONNECT BY regexp_substr("Strings", '[^ ]+', 1, LEVEL) IS NOT NULL
ORDER BY ID;

Lưu ý cách tôi đã sử dụng regexp_substr trong mệnh đề connect by nữa. Điều này là để giải quyết trường hợp có nhiều dấu cách.

Nếu bạn có giới hạn trên có thể dự đoán được về số lượng mục trên mỗi dòng, thì bạn có thể so sánh hiệu suất của truy vấn đệ quy ở trên với một CROSS JOIN đơn giản :

WITH N as (SELECT LEVEL POS FROM DUAL CONNECT BY LEVEL < 10)
--                                                       ^^
--                                                 up to 10 substrings
SELECT ID, regexp_substr("Strings", '[^ ]+', 1, POS)
FROM T CROSS JOIN N
WHERE regexp_substr("Strings", '[^ ]+', 1, POS) IS NOT NULL
ORDER BY ID;

Xem http://sqlfiddle.com/#!4/444e3/1 để biết bản trình diễn trực tiếp



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cơ sở dữ liệu:Hàm Pipelined

  2. Người dùng lược đồ Oracle không thể tạo bảng trong thủ tục

  3. Oracle:'=ANY ()' so với 'IN ()'

  4. Biểu thức chính quy (RegEx) cho IPv6 Tách biệt với IPv4

  5. Múi giờ java.sql.Timestamp có cụ thể không?