
Zitat von
coaler24
Hallo,
ich habe folgendes Problem:
Ich habe eine große mit SQL erstellte Tabelle, in der u.a. folgende Spalte enthalten ist: Annotation
In dieser gibt es beispielsweise Einträge wie:
UNLOCKS_ADDED by Misses Supercool (2011-10-13)
ADDED_UNLOCKS by Stefan Gurtel (2011-01-13)
Für Zwecke der Auswertung würde ich diese Ausdrücke gerne im SQL nach Monat oder Jahr filtern. Dazu sollten im SQL zwei Spalten angelegt werden. In der einen soll das Datum drinstehen und in der anderen "UNLOCKS_ADDED" oder "ADDED_UNLOCKS". Weiteres Problem ist, dass in der Spalte Annotation die Einträge nicht nur einzeln vorkommen, sondern auch verknüpft, also z.B.:
UNLOCKS_ADDED by Misses Supercool (2011-10-13), ADDED_UNLOCKS by Stefan Gurtel (2011-01-13)
Die Einträge selber sind immer durch "," getrennt. Hier wäre es gut, wenn in solchen Fällen einfach nochmal zwei Spalten angelegt werden, analog zu dem oberen.
Das größte Problem ist aber, dass ich von SQL bisher nicht viel Ahnung habe und auch keine Idee wie man das lösen kann.
Hat da vielleicht irgendjemand eine Idee? Meine Vermutung ist, dass das irgendwie über regular expressions funktioniert, aber das klingt für mich alles wie chinesisch.
lG
Stefan
Mal so als Schnellschuß:
Code:
test=# select * from coaler ;
t
---------------------------------------------------------------------------------------------
UNLOCKS_ADDED by Misses Supercool (2011-10-13)
ADDED_UNLOCKS by Stefan Gurtel (2011-01-13)
UNLOCKS_ADDED by Misses Supercool (2011-10-13), ADDED_UNLOCKS by Stefan Gurtel (2011-01-13)
(3 rows)
test=*# alter table coaler add column is_added bool, add column datum date; ALTER TABLE
test=*# update coaler set is_added = (case when regexp_replace(t,',.*$','') ~ 'ADDED_UNLOCKS' then true else false end), datum = regexp_replace(regexp_replace(t,',.*$',''),'[^0-9-]','','g')::date;
UPDATE 3
test=*# select * from coaler ;
t | is_added | datum
---------------------------------------------------------------------------------------------+----------+------------
UNLOCKS_ADDED by Misses Supercool (2011-10-13) | f | 2011-10-13
ADDED_UNLOCKS by Stefan Gurtel (2011-01-13) | t | 2011-01-13
UNLOCKS_ADDED by Misses Supercool (2011-10-13), ADDED_UNLOCKS by Stefan Gurtel (2011-01-13) | f | 2011-10-13
(3 rows) Das Problem ist natürlich der Fall, wo mit Komma getrennt mehrere Einträge drin sind. Dort entweder das als Fehler sehen und wegwerfen (soe ich das oben tue), oder aber aus solchen Einträgen mehrere Zeilen machen. Weitere 2 Spalten würde nur bedeuten, den Fehler beizubehalten.
Andreas
Lesezeichen