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
3 odpowiedzi
W 11g możesz użyć regexp_substr
a> z nowym argumentem (który pozwala dopasować tylko podwyrażenie):
SQL> with data as (
2 select 'i hav to [...] "string one".and the "Second one"' txt from dual
3 union all
4 select ' here is "table". "tiger" some other txt ' from dual)
5 SELECT regexp_substr(txt,'"([^"]*)"', 1, 2, '', 1) FROM data;
REGEXP_SUBSTR(TXT,'"([^"]*)"',1,2,'',1)
------------------------------------------------------------------------------
Second one
tiger
W 10g możesz użyć replace
, aby usunąć dodatkowe "
:
SQL> with data as (
2 select 'i hav to [...] "string one".and the "Second one"' txt from dual
3 union all
4 select ' here is "table". "tiger" some other txt ' from dual)
5 SELECT replace(regexp_substr(txt,'"[^"]*"', 1, 2),
6 '"', '')
7 FROM data;
REPLACE(REGEXP_SUBSTR(TXT,'"[^"]*"',1,2),'"','')
------------------------------------------------
Second one
tiger
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')
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.
Podobne pytania
Nowe pytania
oracle
Oracle Database to wielomodelowy system zarządzania bazami danych stworzony przez Oracle Corporation. NIE używaj tego znacznika w przypadku innych produktów należących do Oracle, takich jak Java i MySQL.