sql >> Database >  >> RDS >> Oracle

REGEX om de n-de waarde uit een lijst te selecteren, waarbij nulls worden toegestaan

Dank aan degenen die reageerden. Na het doornemen van uw antwoorden en de antwoorden in de meegeleverde link, kwam ik tot deze oplossing:

SQL> select REGEXP_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1) data
  2  from dual;

Data
----

Wat kan worden omschreven als "kijk naar het tweede voorkomen van een optionele set van nul of meer tekens die worden gevolgd door een komma of het einde van de regel, en retourneer de eerste subgroep (dat is de gegevens minus de komma of het einde van de regel).

Ik vergat te vermelden dat ik heb getest met de nul in verschillende posities, meerdere nulls, verschillende posities selecteerde, enz.

Het enige voorbehoud dat ik kon vinden, is dat als het veld waarnaar u zoekt groter is dan het beschikbare aantal, het gewoon NULL retourneert, dus u moet zich daarvan bewust zijn. Geen probleem voor mijn geval.

EDIT:ik werk het geaccepteerde antwoord bij ten behoeve van toekomstige zoekers die dit kunnen tegenkomen.

De volgende stap is om de code in te kapselen, zodat deze kan worden omgezet in een eenvoudigere, herbruikbare functie. Hier is de functiebron:

  FUNCTION  GET_LIST_ELEMENT(string_in VARCHAR2, element_in NUMBER, delimiter_in VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
    BEGIN
      RETURN REGEXP_SUBSTR(string_in, '(.*?)(\'||delimiter_in||'|$)', 1, element_in, NULL, 1);
  END GET_LIST_ELEMENT;

Dit verbergt de complexiteit van de regex voor ontwikkelaars die er misschien niet zo comfortabel mee zijn en maakt de code sowieso schoner wanneer deze in gebruik is. Noem het zo om het 4e element te krijgen:

select get_list_element('123,222,,432,555', 4) from dual;


  1. Retourneer het ISO-weeknummer van een datum in SQL Server (T-SQL)

  2. Heb geen databasevergrendeling! op android

  3. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:communicatieverbinding mislukt

  4. MySQL-opdrachten:spiekbriefje met veelvoorkomende MySQL-query's