Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Suche elegante Lösung für Teilstring Abfrage

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Marcus75, 11 April 2013.

  1. Marcus75

    Marcus75 Neuer Benutzer

    Hallo zusammen,

    zunächst einmal kurz zu mir: ich bin ein "Neuer", heiße Marcus, bin 38, komme aus der Nähe von Hannover und habe dieses Forum "ergoogelt" :)

    Nun aber zu meiner Frage: Ich habe einen String in meiner MySQL Tabelle, den ich in einer Abfrage zerlegen muss...

    Der String schaut aus wie folgt:

    AAAAABBBBBYCCCCC
    AAAAABBBBYCCCCC
    AAAAABBBYCCCCC
    AAAAABBYCCCCC
    AAAAABYCCCCC

    Ich möchte den String im Bereich Y nach einem Buchstaben zwischen A-Z trennen, dummerweise ist die Zeichenposition der gewünschten Trennung unterschiedlich - soll also ab Zeichen 5 die Übereinstimmung suchen & den String wie folgt ausgeben:
    AAAAABn

    Gibt es dafür eine elegante Lösung?

    Vielen Dank im Vorraus :)
    Marcus
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Bestimmt. Mir ist nur nicht ganz klar, was Du willst. Ist n die Länge des restlichen Strings?

    Code:
    test=*# select * from marcus;
     id |        t
    ----+------------------
      1 | aaaaabbbbbyccccc
      2 | aaaaabbbbyccccc
      3 | aaaaabbbyccccc
      4 | aaaaabbyccccc
      5 | aaaaabyccccc
    (5 rows)
    
    Time: 0,174 ms
    test=*# select *, substring(t,1,6) || (length(t)-6)::text from marcus;
     id |        t         | ?column?
    ----+------------------+----------
      1 | aaaaabbbbbyccccc | aaaaab10
      2 | aaaaabbbbyccccc  | aaaaab9
      3 | aaaaabbbyccccc   | aaaaab8
      4 | aaaaabbyccccc    | aaaaab7
      5 | aaaaabyccccc     | aaaaab6
    (5 rows)
    
    Das in Großbuchstaben zu machen überlasse ich Dir zur Übung ;-), und ja, wie bei mir üblich: Lösung ist mit PostgreSQL gemacht.

    Andreas
     
  3. Marcus75

    Marcus75 Neuer Benutzer

    Hi,

    mit Bn meinte ich die Zeichen, welche bis zur Trennung auf Y erfolgen.

    Viele Grüße
    Marcus
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Also das:

    Code:
    test=*# select *, substring(t,1,6) || replace(substring(t,6,(length(t)-6)),'b','') from marcus;
    id |        t        |  ?column?
    ----+------------------+-------------
      1 | aaaaabbbbbyccccc | aaaaabycccc
      2 | aaaaabbbbyccccc  | aaaaabycccc
      3 | aaaaabbbyccccc  | aaaaabycccc
      4 | aaaaabbyccccc    | aaaaabycccc
      5 | aaaaabyccccc    | aaaaabycccc
    (5 rows)
     
    --oder
    test=*# select *, substring(t,1,6) || split_part(t,'y',2) from marcus;
    id |        t        |  ?column?
    ----+------------------+-------------
      1 | aaaaabbbbbyccccc | aaaaabccccc
      2 | aaaaabbbbyccccc  | aaaaabccccc
      3 | aaaaabbbyccccc   | aaaaabccccc
      4 | aaaaabbyccccc    | aaaaabccccc
      5 | aaaaabyccccc     | aaaaabccccc
    (5 rows)
     
     
    
    oder was?

    Andreas
     
  5. Marcus75

    Marcus75 Neuer Benutzer

    Hi nochmal,

    also A ist immer 5 Zeichen lang, ab Länge A sollen in B alle Zeichen bis zur Trennung Y (einem Buchstabe) ausgegeben werden, C wird nicht benötigt.

    Viele Grüße
    Marcus
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Naja, wie dem auch sei: Du hast ja jetzt einige Hinweise. Da ich mit PostgreSQL arbeite, kannst das ja eh nicht direkt übernehmen. Also, ich denke, Du schaffst das jetzt.

    Viel Erfolg!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden