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

höchste Zahl in einem Teil-String finden

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von joedoe, 31 August 2013.

  1. joedoe

    joedoe Neuer Benutzer

    Hallo Interessierte,

    ich möchte in einer mysql Spalte (varchar) die höchste Zahl eines Teilstrings finden.

    Beispiel:
    2040-1001-01
    2040-3001-01
    2040-1004-01
    2040-3002-01

    Der Teilstring ist der mit xxx bezeichnete Teil. --> 2040-[variabel][xxx]-01
    Mein Wunsch Ergebnis wäre beim Beispiel die 2040-1004-01.

    Ist so etwas mit einem einzelnen Abruf möglich?


    Danke
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Dein Beispiel paßt IMHO nicht zu Deiner Bedingung.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Ahhh, sorry.

    Code:
    test=*# select * from joedoe ;
      t
    --------------
     2040-1001-01
     2040-3001-01
     2040-1004-01
     2040-3002-01
    (4 rows)
    
    Time: 0,111 ms
    test=*# select * from joedoe order by reverse(substring(reverse(split_part(t,'-',2)),1,3))::int desc limit 1;
      t
    --------------
     2040-1004-01
    (1 row)
    
    Ich verwende PostgreSQL, müßtest Du also nach Deinem MySQL portieren. Unabhängig davon, ob Dir das gelingt: Deine Tabellenstruktur ist, vorsichtig formuliert, suboptimal.
     
  4. joedoe

    joedoe Neuer Benutzer

    Super, danke für die schnelle Lösung.:)
    Habe es tatsächlich geschafft das ganze zum Laufen zu bringen.

    Anscheinend gibt es in mysql keine "split_str" Funktion. Habe aber folgenden Code gefunden der exakt zu meiner Problematik passt.
    http://injustfiveminutes.wordpress.com/2012/10/17/split-function-in-mysql/

    Deine Lösung habe ich soweit abgeändert:
    SELECT Spaltenname FROM t_tabellee ORDER BY REVERSE(SUBSTRING(REVERSE(split_str(Spaltenname,'-',2)),1,3)) DESC LIMIT 1;

    Zum Thema Suboptimal:
    Was wäre hier zu verbessern ? Spaltentyp oder aufteilen wegen der Normalisierungsregelung oder ?
     
    Zuletzt bearbeitet: 1 September 2013
  5. akretschmer

    akretschmer Datenbank-Guru

    Na, das wäre doch fast ein Like wert, oder?


    Kommt drauf an, was Du da abbildest, da kenne ich zuwenig Hintergrund. Die gezeigte Lösung wird nicht sonderlich performant sein, wenn es um viele Datensätze geht. MySQL kennt ja keine funktionalen Indexe. Also, es macht nicht viel Sinn, in einem String wie '2040-3001-01' in dem '001' irgend eine numerisch auszuwertende Information zu speichern.
     
    joedoe gefällt das.
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