sql >> Database teknologi >  >> RDS >> Oracle

Sådan opdeles en streng i Oracle

Problem:

Du vil opdele en streng i Oracle.

Eksempel:

Du har en sætning, og du vil gerne opdele den med mellemrumstegnet.

Løsning:

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

Resultattabellen ser sådan ud:

dele
En
eksempel
sætning.

Diskussion:

For at hente understrenge fra en streng kan du bruge Oracles indbyggede REGEXP_SUBSTR() funktion. Det kræver fire argumenter:

  • Den streng, der skal søges efter en understreng.
  • Det regulære udtryk; dvs. det mønster, du gerne vil finde.
  • Den position, hvor du vil begynde at lede efter mønsteret (standardværdien er 1, hvilket betyder, at du starter fra begyndelsen af ​​strengen).
  • Tallet, der angiver, hvilken forekomst af den matchende understreng, du gerne vil se (standardværdien er 1 , hvilket betyder, at den første matchende understreng skal vises).

I vores eksempel er strengen, der skal søges i, 'An example sentence. ' I strengen leder du efter understrenge, der er ord, som vi her definerer som en hvilken som helst gruppe af alle tegn undtagen mellemrum. Det er derfor, vi specificerer mønsteret '[^ ]+ ', dvs. enhver sekvens af ikke-mellemrumstegn. [^ ] står for ethvert tegn undtagen mellemrum og + tegn står for en eller flere forekomster af sådanne tegn. Det tredje argument skal være standard (1 ), da du vil lede efter ord i hele strengen fra begyndelsen. Det sidste argument er det sværeste – du skal have dets værdi for at ændre sig for hver streng, der skal søges i. Det skal være niveau - en pseudokolonne tilgængelig i hierarkiske forespørgsler ved hjælp af CONNECT BY – som i vores tilfælde vil være lig med rækkenummeret på den aktuelle række i resultatet, når CONNECT BY bruges. Så du har:

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

Dette udtryk skal vælges fra dual – en pseudotabel, der bruges i Oracle, når du ikke vælger fra en faktisk tabel. Derefter skal du CONNECT BY den hierarkiske forespørgselsoperator, forudsat at den hentede understreng ikke skal være NULL . Den hentede understreng vil være NULL, når alle ordene er hentet; den hierarkiske forespørgsel vil derefter stoppe udførelsen. Så du har:

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

Du kan læse her om niveau og CONNECT BY.

Hvis du gerne vil opdele strengen med et andet skilletegn, kan du nemt ændre forespørgslen. Hvis du f.eks. vil dele strengen med kommaet, skal du ændre '[^ ] +' til '[^,]+ '. Her er et eksempel på en forespørgsel:

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. MariaDB dato- og tidsenheder

  2. Sådan fremskyndes masseindsættelse til MS SQL Server ved hjælp af pyodbc

  3. Sådan kontrolleres værdierne af NLS-parametrene i Oracle-databasen

  4. HubSpot ODBC-driver