Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle 11g mendapatkan semua kejadian yang cocok dengan ekspresi reguler

REGEXP_SUBSTR hanya mengembalikan satu nilai. Anda bisa mengubah string Anda menjadi tabel semu dan kemudian menanyakannya untuk kecocokan. Ada cara berbasis XML untuk melakukan ini yang luput dari saya saat ini, tetapi menggunakan connect-by berfungsi, selama Anda hanya memiliki satu string sumber:

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;

... memberi Anda:

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

... dan Anda dapat memfilternya dengan versi pola asli yang sedikit lebih sederhana:

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             

Yang tidak terlalu cantik, tetapi juga tidak memiliki banyak nilai dalam satu bidang.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01950:tidak ada hak istimewa pada tablespace 'USERS'

  2. customer.pk_name bergabung dengan transaction.fk_name vs. customer.pk_id [serial] bergabung dengan transaction.fk_id [integer]

  3. Oracle Dinamis Pivot_In_Clause

  4. Oracle Streams Contoh Replikasi Langkah demi Langkah

  5. Memperbarui Salesforce dari Oracle®