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

Substring menggunakan Oracle Ketika ada beberapa Kecocokan?

Anda dapat menggunakan kombinasi REGEXP_SUBSTR dan REGEXP_COUNT untuk menyelesaikan pertanyaan Anda:

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

Berikut penjelasan singkat tentang cara kerjanya:

  1. REGEXP_COUNT menghitung kemunculan pola target, sehingga kita bisa mendapatkan kemunculan terakhir nanti.
  2. Bungkus hasilnya dengan GREATEST karena 0 tidak valid untuk REGEXP_SUBSTR parameter.
  3. Hubungi REGEXP_SUBSTR untuk mengambil kemunculan terakhir dari string target.

Ini adalah DBFiddle untuk menunjukkan kepada Anda bahwa itu berfungsi (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. Mengapa saya mendapatkan ORA-00932:tipe data tidak konsisten:diharapkan - didapat - saat menggunakan COLLECT() dalam pernyataan yang disiapkan?

  2. klausa OVER di Oracle

  3. Terhubung ke Oracle DB dari Spring-jdbc dengan otentikasi Oracle Wallet

  4. Bagaimana saya harus menyimpan GUID di Oracle?

  5. Oracle Insert via Select dari beberapa tabel di mana satu tabel mungkin tidak memiliki baris