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

Sådan fjerner du specifik værdi fra kommasepareret streng i Oracle

Her er en løsning, der kun bruger standard strengfunktioner (i stedet for regulære udtryk) - hvilket burde resultere i hurtigere eksekvering i de fleste tilfælde; det fjerner kun 3, når det er det første tegn efterfulgt af komma, det sidste tegn foran komma, eller foran og efterfulgt af komma, og det fjerner det komma, der går foran det i mellembogstavet, og det fjerner det komma, der følger efter det i første og tredje tilfælde.

Den er i stand til at fjerne to 3'ere i træk (hvilket nogle af de andre tilbudte løsninger ikke er i stand til at gøre), mens den efterlader på hinanden følgende kommaer (som formentlig står for NULL) og forstyrrer ikke tal som 38 eller 123.

Strategien er først at fordoble hvert komma (erstat ,). med ,, ) og tilføj og foran et komma (til begyndelsen og slutningen af ​​strengen). Fjern derefter hver forekomst af ,3, . Udskift hver ,, fra det, der er tilbage tilbage med en enkelt , og fjern til sidst den førende og efterfølgende , .

with
     test_data ( str ) as (
       select '1,2,3,4,5'     from dual union all
       select '1,2,3,3,4,4,5' from dual union all
       select '12,34,5'       from dual union all
       select '1,,,3,3,3,4'   from dual
     )
select str,
       trim(both ',' from 
             replace( replace(',' || replace(str, ',', ',,') || ',', ',3,'), ',,', ',')
           ) as new_str
from   test_data
;

STR           NEW_STR
------------- ----------
1,2,3,4,5     1,2,4,5
1,2,3,3,4,4,5 1,2,4,4,5
12,34,5       12,34,5
1,,,3,3,3,4   1,,,4

4 rows selected.

Bemærk Som påpeget af MT0 (se kommentarer nedenfor), vil dette trimme for meget, hvis den originale streng begynder eller slutter med kommaer. For at dække det tilfælde, i stedet for at pakke alt ind i trim(both ',' from ...) Jeg bør pakke resten ind i en underforespørgsel og bruge noget som substr(new_str, 2, length(new_str) - 2) i den ydre forespørgsel.



  1. Eksterne mySQL-forbindelser kan ikke oprette forbindelse til MySQL 4.1+ ved hjælp af den gamle usikre autentificeringsfejl fra XAMPP

  2. Brug af tofasede commits på postgres

  3. Får Mysql2::Error (SSL-forbindelsesfejl:ASN:dårlig anden signaturbekræftelse) på Heroku-appen med AWS RDS

  4. Sådan sletter du rækker fra tre tabeller - forespørgselsfejl