Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle 11g pobiera wszystkie dopasowane wystąpienia za pomocą wyrażenia regularnego

REGEXP_SUBSTR zwraca tylko jedną wartość. Możesz zmienić swój ciąg w pseudo-tabelę, a następnie zapytać o dopasowania. Jest na to sposób oparty na XML, który w tej chwili mi umyka, ale użycie connect-by działa, o ile masz tylko jeden ciąg źródłowy:

SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, LEVEL) AS substr
FROM (
    SELECT 'Txa233141b Ta233141 Ta233142 Ta233147 Ta233148' AS str FROM DUAL
)
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, '[^ ]+')) + 1;

... daje:

SUBSTR             
--------------------
Txa233141b           
Ta233141             
Ta233142             
Ta233147            
Ta233148            

... i możesz to odfiltrować za pomocą nieco prostszej wersji oryginalnego wzoru:

SELECT substr
FROM (
    SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, LEVEL) AS substr
    FROM (
        SELECT 'Txa233141b Ta233141 Ta233142 Ta233147 Ta233148' AS str
        FROM DUAL
    )
    CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, '[^ ]+')) + 1
)
WHERE REGEXP_LIKE(substr, '^[A-Za-z]{2}[0-9]{5,}$');

SUBSTR             
--------------------
Ta233141             
Ta233142             
Ta233147             
Ta233148             

Co nie jest zbyt ładne, ale nie zawiera wielu wartości w jednym polu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak obliczyć różnicę między dwiema datami w PostgreSQL/Oracle?

  2. ORA-12728:nieprawidłowy zakres w wyrażeniu regularnym

  3. Oracle SQL — sumowanie i grupowanie danych według tygodnia

  4. Oracle ODP.NET wersja agnostyczna alternatywa

  5. Pisanie w ExcelSheet przy użyciu pakietu UTL_FILE w Oracle