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

Opdel streng efter afgrænsningsposition ved hjælp af orakel

Hvis du kun har én streng, og du ved, at den altid har præcis fire dele, kan du opdele den sådan, ved kun at bruge standard strengfunktioner (og undgå regulære udtryk, som er mere fleksible, men ofte langsommere).

BEMÆRK :Anden halvdel af dette svar adresserer strenge med variabelt antal "dele".

with inputs ( str ) as (
       select ',,defoifcd,87765' from dual
     )
-- end of TEST data; SQL query begins below (use your actual table and column names)
select substr(str, 1, instr(str, ',') - 1) as part_1,
       substr(str, instr(str, ',') + 1, 
              instr(str, ',', 1, 2) - instr(str, ',') - 1) as part_2,
       substr(str, instr(str, ',', 1, 2) + 1, 
              instr(str, ',', 1, 3) - instr(str, ',', 1, 2) - 1) as part_3,
       substr(str, instr(str, ',', -1) + 1) as part_4
from   inputs;

PART_1   PART_2   PART_3   PART_4
-------- -------- -------- --------
                  defoifcd 87765

1 row selected.

Hvis antallet af dele ikke er kendt på forhånd, er det bedre at få outputtet i et andet format (se outputtet nedenfor). Hvis man har brug for at arrangere delene i kolonner, der kan gøres efter al anden behandling er udført - og det er altid bedst at overlade til rapporteringsapplikationen frem for at gøre det i SQL alligevel.

with inputs ( id, str ) as (
       select 1, ',,defoifcd,87765' from dual union all
       select 2, ''                 from dual union all
       select 3, 'a, b, c'          from dual
     )
-- end of TEST data; SQL query begins below (use your actual table and column names)
select id, str, level as part_number,
       substr(aug_str, instr(aug_str, ',', 1, level) + 1,
              instr(aug_str, ',', 1, level + 1) - instr(aug_str, ',', 1, level) - 1) as val
from   ( select id, str, ',' || str || ',' as aug_str from inputs)
connect by level <= length(str) - length(translate(str, 'z,', 'z')) + 1
       and prior id = id
       and prior sys_guid() is not null
;

ID STR              PART_NUMBER VAL
-- ---------------- ----------- ----------
 1 ,,defoifcd,87765           1
 1 ,,defoifcd,87765           2
 1 ,,defoifcd,87765           3 defoifcd
 1 ,,defoifcd,87765           4 87765
 2                            1
 3 a, b, c                    1 a
 3 a, b, c                    2  b
 3 a, b, c                    3  c

8 rows selected.



  1. Oprettelse af en simpel brugergrænseflade for at få adgang til en Oracle-database

  2. Sådan fungerer sqrt() i PostgreSQL

  3. Hvordan kan jeg sammenligne store og små bogstaver i SQL-strenge på MySQL?

  4. Forbindelse til MySQL fra .NET ved hjælp af SSH.NET Library