Oracle
 sql >> Baza danych >  >> RDS >> Oracle

connect by klauzula w regex_substr

"Nadużycie" (jak ujął to Colin't Hart) connected by ma tutaj dobry cel:używając REGEXP_SUBSTR możesz wyodrębnić tylko jedno z 4 dopasowań (23,34,45,56):wyrażenie regularne [^,]+ pasuje do dowolnej sekwencji znaków w łańcuchu, która nie zawiera przecinka.

Jeśli spróbujesz biegać:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token" 
FROM   DUAL

otrzymasz 23 .

a jeśli spróbujesz biegać:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM   DUAL

otrzymasz także 23 tylko, że teraz ustawiamy również dwa dodatkowe parametry :zacznij szukać od pozycji 1 (co jest ustawieniem domyślnym) i zwróć pierwsze wystąpienie.

Teraz biegnijmy:

SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM   DUAL

tym razem otrzymamy 34 (2. wystąpienie) i użycie 3 jako ostatni parametr zwróci 45 i tak dalej.

Użycie rekurencyjnych connected by wraz z level upewnia się, że otrzymasz wszystkie odpowiednie wyniki (choć niekoniecznie w oryginalnej kolejności!):

SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM   DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1

powróci:

TOKEN
23
34
45
56

który nie tylko zawiera wszystkie 4 wyniki, ale także dzieli je na osobne wiersze w zestawie wyników!

Jeśli będziesz skrzypować z nim - może dać ci jaśniejszy obraz tematu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ROWID (wyrocznia) – czy to ma zastosowanie?

  2. Jak uzyskać typ danych kolumny w Oracle z PL-SQL z niskimi uprawnieniami?

  3. Jak dodać 10 sekund w current_timestamp SQL ( Oracle )

  4. Jak wykonać funkcję w Oracle z parametrami

  5. Błąd podczas wykonywania pakietu