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

Подниз с помощта на Oracle Когато има множество съвпадения?

Можете да използвате комбинация от REGEXP_SUBSTR и REGEXP_COUNT за да разрешите въпроса си:

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

Ето кратко обяснение как работи:

  1. REGEXP_COUNT брои срещанията на целевия модел, така че да можем да получим последното срещане по-късно.
  2. Увийте резултата в GREATEST защото 0 е невалиден за REGEXP_SUBSTR параметър.
  3. Извикайте REGEXP_SUBSTR за да вземете последното срещане на целевия низ.

Ето DBFiddle, за да ви покаже как работи (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. Литералът за дата '[гггг-мм-дд]' на Oracle винаги ли използва модела гггг-мм-дд?

  2. Създаване на материализиран изглед, който се опреснява на всеки 5 минути

  3. Как да извикате процедура на оракул на Laravel?

  4. InterfaceError:Не може да се получи манипулатор на средата на Oracle; ORACLE_HOME е правилен и SQL*Plus ще се свърже

  5. Обединяване на много данни в едно