Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle 11g получава всички съвпадащи събития чрез регулярен израз

REGEXP_SUBSTR връща само една стойност. Можете да превърнете низа си в псевдотаблица и след това да го потърсите за съвпадения. Има базиран на XML начин да направя това, който ми убягва в момента, но използването на connect-by работи, стига да имате само един изходен низ:

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;

... ви дава:

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

... и можете да филтрирате това с малко по-опростена версия на оригиналния си шаблон:

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             

Което не е много красиво, но нито едно от двете не съдържа множество стойности в едно поле.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Имате PL/SQL изходи в реално време

  2. Каква е по подразбиране точност и мащаб за число в Oracle?

  3. ORA-00984:колоната не е разрешена тук

  4. Oracle Managed ODP.NET не може да намери tnsnames.ora

  5. Брой петъци между две дати