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

Chuỗi con sử dụng Oracle Khi có nhiều Kết quả phù hợp?

Bạn có thể sử dụng kết hợp REGEXP_SUBSTRREGEXP_COUNT để giải quyết câu hỏi của bạn:

WITH test_data(input) AS
(
  SELECT  '1.CABLE : THERMINAL 3X2X0.25MM FPCP PLUS UNITRONIC S9C000019651' FROM DUAL UNION ALL 
  SELECT  '2.Motor Protection Relay EMR-3MPO-2S9CB1-1 (was IQ1000II / MP 3000)' FROM DUAL UNION ALL
  SELECT  '3.GREASE : BEM 41-132 3KG CARTRIDGE KLUBERPLEX S9C00019171 (Order by KG''s required)' FROM DUAL UNION ALL
  SELECT  '4.DO NOT USE CARRIER SPIDEX ZK 38 98 SH. S9C00011593 (SUPERSEDE BY S9C10204555 - WIN0020775)' FROM DUAL
)
SELECT regexp_substr(td.input, 
                     'S9C[0-9]{8}( |$)', 
                     1, 
                     GREATEST(1, regexp_count(td.input, 'S9C[0-9]{8}( |$)')))
FROM test_data td

Dưới đây là giải thích nhanh về cách nó hoạt động:

  1. REGEXP_COUNT đếm số lần xuất hiện của mẫu mục tiêu, vì vậy chúng tôi có thể nhận được lần xuất hiện cuối cùng sau này.
  2. Tóm tắt kết quả bằng GREATEST vì 0 không hợp lệ cho REGEXP_SUBSTR tham số.
  3. Gọi REGEXP_SUBSTR để lấy lần xuất hiện cuối cùng của chuỗi mục tiêu.

Đây là một DBFiddle để cho bạn thấy nó đang hoạt động ( DBFiddle )




  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 thế nào để trung bình khoảng thời gian?

  2. ORA-03113:phần cuối của tệp trên kênh liên lạc

  3. Kiểm tra độ dài của cột trong XMLTable

  4. Oracle PL / SQL - Cách tạo một biến mảng đơn giản?

  5. Làm thế nào để một Oracle NUMBER có Quy mô lớn hơn Độ chính xác?