Proszę, pomóż mi,

Mam taki sznurek

Varchar2 b :

'i hav to extract second double queted string "string one".and the "Second one"'

Oczekiwany wynik: Drugi

Varchar2 a :

' here is "table". "tiger" some other txt ';

Oczekiwany wynik to tygrys

Z powyższych wzorców ciągów muszę wyodrębnić drugą dokładność ciągu w podwójnym cudzysłowie. Proszę o pomoc w tym zakresie, próbowałem wielu prób

1
Maddy 17 luty 2012, 18:15

3 odpowiedzi

Najlepsza odpowiedź

Możesz użyć REGEXP_REPLACE:

WITH t AS (
   SELECT 'i hav to extract second double queted string "string one".and the "Second one"'  as x FROM dual
   UNION
   SELECT ' here is "table". "tiger" some other txt ' as x FROM dual)
SELECT x,
       REGEXP_REPLACE(x, '^.*".*".*(".*").*$', '\1')
  FROM t;

Zwroty:

"tiger"
"Second one"

Mam nadzieję, że to pomoże...

Jeśli nie chcesz cytatów, użyj:

REGEXP_REPLACE(x, '^.*".*".*"(.*)".*$', '\1')
3
Ollie 17 luty 2012, 18:39

Przykład użycia instr() do pobrania indeksu znaku (i jakiego wystąpienia) i substr() do pobrania podłańcucha łańcucha:

select 
    substr(str,
        instr(str, '"', 1,3)+1, 
        instr(str, '"', 1, 4)- instr(str, '"', 1,3)-1)
from
   (select 'here is "table". "tiger" some other txt' str from dual) strt;

Tutaj substr używa instr(str, '"',1,3), aby uzyskać trzecie wystąpienie „”'. Następnie używa instr(str, '"', 1, 4), aby uzyskać czwarte wystąpienie, ale musimy odjąć pozycję trzeciego „””, ponieważ to parametr jest rozmiarem tekstu do podciągu (tzn. tekstu między cudzysłowami w naszym przypadku).

Możesz poprawić sposób, w jaki otrzymujemy czwarte wystąpienie, ponieważ ponownie rozpoczyna wyszukiwanie od pozycji 1, a nie pozycji 3.

3
wmorrison365 17 luty 2012, 18:50