Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Spezielle Strings über Regular Expressions finden?

  1. #1
    coaler24 ist offline Neuer Benutzer
    Registriert seit
    25.10.2011
    Beiträge
    22

    Standard Spezielle Strings über Regular Expressions finden?

    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
    Geändert von coaler24 (25.10.2011 um 10:25 Uhr)

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von coaler24 Beitrag anzeigen
    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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    coaler24 ist offline Neuer Benutzer
    Registriert seit
    25.10.2011
    Beiträge
    22

    Standard

    Hallo Andreas,

    das ging ja super schnell. Danke

    Was ich leider vergessen hatte zu erwähnen, war, dass ich PostGreSQL nutze (bzw. nutzen muss) und da gerade nicht durchsehe, wo in deinem Code die eigentlich Query ist? Hoffe, dass sich die Befehle nicht unterscheiden, aber weiß ehrlich gesagt nicht, was ich jetzt kopieren muss.

    Dann würde ich noch gerne wissen, was das "f" und "t" bei dir in der Spalte "is_added" bedeutet?

    Da hast du natürlich Recht, da wären mehrere Zeilen wirklich besser. Ist das leicht zu realisieren?

    LG
    Stefan

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von coaler24 Beitrag anzeigen
    Hallo Andreas,

    das ging ja super schnell. Danke

    Was ich leider vergessen hatte zu erwähnen, war, dass ich PostGreSQL nutze (bzw. nutzen muss) und da gerade nicht durchsehe, wo in deinem Code die eigentlich Query ist? Hoffe, dass sich die Befehle nicht unterscheiden, aber weiß ehrlich gesagt nicht, was ich jetzt kopieren muss.
    Ähm, ich nutze auch PostgreSQL. Und wenn Du das nutzt, dann kennst doch sicher auch psql, das CLI-Interface.

    Dann würde ich noch gerne wissen, was das "f" und "t" bei dir in der Spalte "is_added" bedeutet?
    Ähm, ja. Die Spalte ist vom Typ BOOL, t und f stehen für TRUE und FALSE.

    Da hast du natürlich Recht, da wären mehrere Zeilen wirklich besser. Ist das leicht zu realisieren?
    Jein. Für Dich wohl eher nicht ...

    Ich denke mal, Du brauchst jemanden, der Dir vor Ort hilft.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    coaler24 ist offline Neuer Benutzer
    Registriert seit
    25.10.2011
    Beiträge
    22

    Standard

    Hi Andreas,

    also ich arbeite nur mit dem SQL Editor, das CLI Interface sagt mir gar nichts. Wie kann ich den Code denn jetzt für den SQL Editor nutzen?

    Ja, letzteres denke ich wohl auch, aber funktioniert nicht. Viel wichtiger ist überhaupt, dass man nach dem Datum und der Bezeichnung "Added_Unlocks" bzw. "UNLOCKS_INCREASED" filtern kann.

    lG

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von coaler24 Beitrag anzeigen
    Hi Andreas,

    also ich arbeite nur mit dem SQL Editor, das CLI Interface sagt mir gar nichts. Wie kann ich den Code denn jetzt für den SQL Editor nutzen?
    Copy & Paste?

    Aber: den must ja eh anpassen, und wenn Du nicht erkennen kannst, was SQL-Code von mir ist und was die Antwort des Servers und was der Prompt vom psql-CLI, dann brauchst jemand, der Deine Maus führt. Sorry.

    Ja, letzteres denke ich wohl auch, aber funktioniert nicht. Viel wichtiger ist überhaupt, dass man nach dem Datum und der Bezeichnung "Added_Unlocks" bzw. "UNLOCKS_INCREASED" filtern kann.

    lG
    Dein Tabellendesign ist kapott. Glaub mir.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    coaler24 ist offline Neuer Benutzer
    Registriert seit
    25.10.2011
    Beiträge
    22

    Standard

    Hmm, kannst mir nicht sagen wie das als Query Text aussehen würde?

    Das Tabellendesign kann ich leider nicht ändern, da das eine mega DB ist und ohnehin nicht in meiner Verantwortung liegt ^^

  8. #8
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von coaler24 Beitrag anzeigen
    Hmm, kannst mir nicht sagen wie das als Query Text aussehen würde?
    Alles, was nach dem # kommt, ist mein SQL.

    Das Tabellendesign kann ich leider nicht ändern, da das eine mega DB ist und ohnehin nicht in meiner Verantwortung liegt ^^
    Eben wenn es groß ist, sollte man es optimieren. Dein Tabellendesign kann keine Indexe für Deine Art von Abfragen nutzen. Das ist - tödlich.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  9. #9
    coaler24 ist offline Neuer Benutzer
    Registriert seit
    25.10.2011
    Beiträge
    22

    Standard

    Nagut, komme ich irgendwie nicht klar mit, werd mal in Ruhe versuchen...

    Ja stimmt schon, aber dass das bescheuert gemacht wird ist leider so. Bisher gab es diese Auswertung ja auch noch nicht und jetzt sieht man auch wie unmöglich die letztlich zu realisieren ist. Werde jetzt in Excel erstmal alles ab dem Komma trennen und dann mit Excel funktionen das datum irgendwie auslesen, da ich das mit dem SQL code echt gar nicht checke...

    Wo soll denn dein SQL mit dem Alter hin bei einer Abfrage wie dieser??

    SELECT
    serial_number,
    annotation,
    created,
    article_code

    FROM
    licensing_db.serial_numbers
    WHERE
    serial_numbers.annotation LIKE '%UNLOCK%'
    AND serial_numbers.annotation NOT LIKE '%AUTO_INCREASE_MAX_UNLOCKS%'
    AND serial_numbers.created >='2011-01-01'
    Order By serial_numbers.created ASC

    Kannst du mir das sagen??

  10. #10
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von coaler24 Beitrag anzeigen
    Nagut, komme ich irgendwie nicht klar mit, werd mal in Ruhe versuchen...

    Ja stimmt schon, aber dass das bescheuert gemacht wird ist leider so. Bisher gab es diese Auswertung ja auch noch nicht und jetzt sieht man auch wie unmöglich die letztlich zu realisieren ist. Werde jetzt in Excel erstmal alles ab dem Komma trennen und dann mit Excel funktionen das datum irgendwie auslesen, da ich das mit dem SQL code echt gar nicht checke...

    Wo soll denn dein SQL mit dem Alter hin bei einer Abfrage wie dieser??

    SELECT
    serial_number,
    annotation,
    created,
    article_code

    FROM
    licensing_db.serial_numbers
    WHERE
    serial_numbers.annotation LIKE '%UNLOCK%'
    AND serial_numbers.annotation NOT LIKE '%AUTO_INCREASE_MAX_UNLOCKS%'
    AND serial_numbers.created >='2011-01-01'
    Order By serial_numbers.created ASC

    Kannst du mir das sagen??
    Das mit dem ALTER TABLE ist eine Veränderung der Tabelle, um einfach weitere Spalten zuzufügen, z.B. für das Datum. In Deinem ersten Posting war das ja noch alles in einer Spalte drin. So wie das (im ersten Posting) aussah, speichert ihr alles in einer Spalte als Text. Wenn man in sowas nach bestimmten Merkmalen (z.B. GRÖßER ALS DATUM) suchen will wird das eine Textsuche, und richtig krank wird es, wenn Du dann darin nach allen Werten suchen willst, wo Wochentag vom Datum Dienstag ist, mal als Beispiel.

    Also, mein SQL war weniger dafür gedacht, in Deinem Misthaufen, ähm sorry, Tabelle zu suchen, sondern diesen erst einmal besser zu strukturieren (ALTER TABLE, UPDATE)


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Spezielle Datensätze heraussuchen
    Von treFFnix im Forum SQL
    Antworten: 2
    Letzter Beitrag: 04.05.2010, 15:04
  2. Umlaute und Regular Expressions
    Von ___Kevin___ im Forum Konfiguration
    Antworten: 3
    Letzter Beitrag: 26.06.2009, 03:22
  3. Umlaute und Regular Expressions
    Von herbstra im Forum SQL
    Antworten: 4
    Letzter Beitrag: 30.05.2008, 13:19
  4. Umlaute bei Regular Expressions
    Von helmar im Forum Konfiguration
    Antworten: 39
    Letzter Beitrag: 22.03.2007, 17:18
  5. Strings ersetzen über PG?
    Von Sy- im Forum Allgemeines
    Antworten: 6
    Letzter Beitrag: 09.01.2006, 14:19

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum