höchste Zahl in einem Teil-String finden

joedoe

Neuer Benutzer
Beiträge
2
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
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.736
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

Dein Beispiel paßt IMHO nicht zu Deiner Bedingung.
 

akretschmer

Datenbank-Guru
Beiträge
9.736
Dein Beispiel paßt IMHO nicht zu Deiner Bedingung.

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.
 

joedoe

Neuer Benutzer
Beiträge
2
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:
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.736
Super, danke für die schnelle Lösung.:)

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


Zum Thema Suboptimal:
Was wäre hier zu verbessern ? Spaltentyp oder aufteilen wegen den Normalisierungsregelung 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.
 
Oben