Stringattribut zerlegen

Ludwigmller

SQL-Guru
Beiträge
168
Ich habe eine fremde sqlite - DB, die von einer Android-App erzeugt wurde. Leider gibt es dort eine Spalte, in der mehrere Werte nur durch ein Semikolon getrennt werden, statt in einer seperaten Spalte zu stehen. Z. B.:
Code:
false;true;false;0.0;0.0;;false

Wie kann ich mit einem SELECT diesen Inhalt der Spalte in die einzelnen Werte zerlegen, sodass ich damit weitere Abfagen machen kann?
 
Werbung:
Du könntest dem String in ein Array transformieren und weiter verarbeiten. Es gibt auch andere Möglichkeiten. Kern des Problems ist dabei, wie verlässlich (konstant und sauber) die Werte in der Spalte angegeben sind.
Ist der Inhalt unsauber, führt die Verarbeitung leicht zu Fehlern.
Code:
Select
  da.DataArray[1]::bool as val1,
  da.DataArray[2]::bool as val2,
  da.DataArray[3]::bool as val3,
  da.DataArray[4]::float as val4,
  da.DataArray[5]::float as val5,
  da.DataArray[6]::text as val6,
  da.DataArray[7]::bool as val7 from
(select string_to_array('false ;true;false;  0.1 ; 10.3333;;false',';') as DataArray) da
 
Ich glaube Du verwechselst SQLite und Postgres. SQLite hat keine Arrays und auch kein string_to_array()
Oh, nein, 'tschuldigung, ich verwechsel die nicht. Ich bin aus unbekannten Gründen davon ausgegangen, die Datenquelle stammt aus SQLite und die DB wäre nun Postgres.
Ich habe hier einen Ansatz für SQLite gemacht, der allerdings die Einzelwerte als rows ausgibt:
SQLite 3.27 | db<>fiddle
Jenachdem, was man braucht, muss man noch transformieren z.b. mit Case When.
 
Werbung:
@Dukel da die App nicht von mir stammt, müsste ich halt nur dafür eine programmieren... aber wäre wohl einfacher mit Java als mit der (für mich) sehr kompliziereten Abfrage von @dabadepdu

SQlite unterstützt keine user defined funtions, richtig? Sonst hätte ich gerne eine Funktion gehabt, der man einen int Parameter übergibt, und dann den Teil vor dem x. Semikolon zurück gegeben bekommt.
Gibt es keine Funktion mit der ich z.B. das 4. und 5. Semikolon finden kann und dann mit einer anderen Funktion den Teil dazwischen ?
 
Zuletzt bearbeitet:
Zurück
Oben