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

Jak podzielić ciąg w Oracle

Problem:

Chcesz podzielić ciąg w Oracle.

Przykład:

Masz zdanie i chcesz je podzielić przez spację.

Rozwiązanie:

SELECT
REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) AS parts
FROM dual
CONNECT BY REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) IS NOT NULL;

Tabela wyników wygląda tak:

części
An
przykład
zdanie.

Dyskusja:

Aby uzyskać podciągi z ciągu, możesz użyć wbudowanej funkcji Oracle REGEXP_SUBSTR(). Wymaga czterech argumentów:

  • Ciąg do wyszukania podciągu.
  • Wyrażenie regularne; czyli wzór, który chcesz znaleźć.
  • Pozycja, od której chcesz zacząć szukać wzorca (wartość domyślna to 1, co oznacza rozpoczęcie od początku ciągu).
  • Liczba określająca wystąpienie pasującego podciągu, które chcesz zobaczyć (wartość domyślna to 1 , co oznacza, że ​​powinien zostać wyświetlony pierwszy pasujący podciąg).

W naszym przykładzie ciąg do przeszukania to „An example sentence. ' W ciągu szukasz podciągów, które są słowami, które definiujemy tutaj jako dowolne grupy dowolnych znaków z wyjątkiem spacji. Dlatego podajemy wzorzec '[^ ]+ ', tj. dowolna sekwencja znaków niebędących spacją. [^ ] oznacza dowolny znak z wyjątkiem spacji, a + znak oznacza jedno lub więcej wystąpień takich znaków. Trzeci argument powinien być domyślnym (1 ), ponieważ chcesz szukać słów w całym ciągu od początku. Ostatni argument jest najtrudniejszy – musisz zmienić jego wartość dla każdego przeszukiwanego ciągu. Powinien być level – pseudokolumna dostępna w zapytaniach hierarchicznych przy użyciu CONNECT BY – który w naszym przypadku będzie równy numerowi wiersza bieżącego wiersza w wyniku przy użyciu CONNECT BY. Masz więc:

REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level)

To wyrażenie powinno być wybrane z dual – pseudotabela używana w Oracle, gdy nie wybierasz z rzeczywistej tabeli. Następnie powinieneś CONNECT BY hierarchiczny operator zapytań, pod warunkiem, że pobrany podciąg nie powinien mieć wartości NULL . Pobrany podciąg będzie miał wartość NULL po pobraniu wszystkich słów; zapytanie hierarchiczne zatrzyma wykonanie. Masz więc:

FROM dual CONNECT BY REGEXP_SUBSTR('An example sentence.', '[^ ]+', 1, level) IS NOT NULL

Możesz przeczytać tutaj o poziomie i CONNECT BY.

Jeśli chcesz podzielić ciąg za pomocą innego ogranicznika, możesz łatwo zmodyfikować zapytanie. Na przykład, jeśli chcesz podzielić ciąg przez przecinek, zmień „[^ ] +' do '[^,]+ „. Oto przykładowe zapytanie:

SELECT REGEXP_SUBSTR('Johnson,Blair,Black,Newman,Henderson', '[^,]+', 1, level) AS parts
FROM dual CONNECT BY REGEXP_SUBSTR('Johnson,Blair,Black,Newman,Henderson', '[^,]+', 1, level) IS NOT NULL;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Moja podróż OOW15 jest zakończona

  2. Oracle Database TLS1.2 / połączenie SSL przy użyciu JDBC thin i JKS

  3. Jak wyodrębnić grupę z wyrażenia regularnego w Oracle?

  4. Jak usunąć odpowiednie wypełnienie w nazwie dnia w Oracle?

  5. Zapytanie Oracle do pobrania nazw kolumn