myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » MAX Wert suchen in einer VARCHAR Spalte mit SUBSTRING
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

MAX Wert suchen in einer VARCHAR Spalte mit SUBSTRING

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
echdeneth echdeneth ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 10
Entwicklungsumgebung: C# / Visual Studio 2017/19
Herkunft: Sachsen


echdeneth ist offline

MAX Wert suchen in einer VARCHAR Spalte mit SUBSTRING

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

verwendetes Datenbanksystem: <MySQL>

Hier wird es mir etwas zu Hoch, aber ich brauche eine solche Funktion.

Ich möchte aus einer Reihe an Daten (muss VARCHAR sein) den MAX Wert innerhalb einer Zeichenkette finden.

also:

Datumeins123bla
Datumzwei234etc
Datumzwei456usw

Quasi: select * from BlaTB where BlaSpalte like 'Datumzwei%'

Habe im Internet gefunden:

SELECT * FROM testtable WHERE substring(test,2)=(SELECT MAX(CAST(SUBSTRING(test,2) AS SIGNED)) FROM testtable); und versuche auf meine Bedürfnisse umzumünzen

Das ist mir SQL technisch (noch) etwas zu hoch und weiss nicht wie ich untere Anfrage mit LIKE kombinieren kann.

Danke im Vorraus
25.06.2019 10:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.277
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Einfach per AND kombinieren:

Code:
1:
SELECT * FROM BlaTB WHERE BlaSpalte LIKE 'Datumzwei%' AND SUBSTRING(BlaSpalte,10,3)=(SELECT MAX(CAST(SUBSTRING(BlaSpalte,10,3) AS SIGNED)) FROM BlaTB);

Klappt aber nur, wenn immer genau 3 Ziffern dahinter stehen (10 ist die Position).

Edit: evtl. BlaSpalte LIKE 'Datumzwei%' auch noch in den Subselect per AND einbauen (je nachdem ob du den MAX-Wert über alle Daten haben willst oder nur bezogen auf deine LIKE-Einschränkung).

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am 25.06.2019 11:23.

25.06.2019 11:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 945
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

nunja - die korrekte Implementierung hängt vom genauen String ab - scheinbar suchst du im String jeweils das "123" "456" - wichtig wäre hier zu wissen, ob Substring überhaupt einsetzbar ist. (also ob der Teil vor dem interessanten Teil immer gleich lang ist, und ob der interessante Teil auch immer gleich lang ist)

Ist das so überhaupt einsetzbar für dich? Wie genau funktioniert die Aufteilung innerhalb dieser Spalte? Und zudem: Wer zum Teufel hat das verbrochen?

LG
25.06.2019 11:27 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Stefan.Haegele Stefan.Haegele ist männlich
myCSharp.de-Mitglied

avatar-3068.jpg


Dabei seit: 13.03.2009
Beiträge: 342
Entwicklungsumgebung: Visual Studio 2010 Ultimat
Herkunft: Untermeitingen


Stefan.Haegele ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Warum muss der Datumswert als VARCHAR gespeichert werden? Daten sollten immer in der eigenen Urform gespeichert werden - die Umwanldung zur Anzeige übernimmt später der Client.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Stefan.Haegele am 26.06.2019 07:07.

26.06.2019 07:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
echdeneth echdeneth ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 10
Entwicklungsumgebung: C# / Visual Studio 2017/19
Herkunft: Sachsen

Themenstarter Thema begonnen von echdeneth

echdeneth ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Es handelt sich um folgendes Format: Jahr-Monat-LfdNr.-XX
Also nicht nur Datum sondern noch extra Zeichen


Fragliche Teile sind gleich lang. Datum(8 Zeichen), Lfdnr.(4 Zeichen), 2 extra Zeichen
Letzte Frage: Ich nicht :D
26.06.2019 08:19 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Stefan.Haegele Stefan.Haegele ist männlich
myCSharp.de-Mitglied

avatar-3068.jpg


Dabei seit: 13.03.2009
Beiträge: 342
Entwicklungsumgebung: Visual Studio 2010 Ultimat
Herkunft: Untermeitingen


Stefan.Haegele ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von echdeneth:
Es handelt sich um folgendes Format: Jahr-Monat-LfdNr.-XX
Also nicht nur Datum sondern noch extra Zeichen

Dann würde ich die Daten in 2 Spalten speichern. Daten immer in der Urform speichern - die spätere Verarbeitung wird es dir danken.

Beispiel:
Was machst du wenn der der 2. Teil auf einmal 4 oder 5 stellig wird? Schon hast du hier ein rießen Problem...

Zitat von echdeneth:
Letzte Frage: Ich nicht :D

Dies ist eine Antwort, welche ich von keinem meiner Entwicklern gelten lassen würde. Wenn so etwas endeckt wird, wird versucht die Ursache zu beheben und nicht an den Symtomen herum zu spielen....
26.06.2019 08:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
echdeneth echdeneth ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 10
Entwicklungsumgebung: C# / Visual Studio 2017/19
Herkunft: Sachsen

Themenstarter Thema begonnen von echdeneth

echdeneth ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

War ein Scherz - auch Entwickler brauchen Humor!

Dieser Wert soll so sein, d.h. Datum am Anfang dann 4 Ziffern (ist so konzipiert das es nicht mehr als 4 sind) und 2 Buchstaben, kann/soll nicht getrennt werden.
26.06.2019 12:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
myCSharp.de
Moderationshinweis von gfoidl (26.06.2019 14:35):

Bitte keine Fullquotes. Bitte beachte  [Hinweis] Wie poste ich richtig? Punkt 2.3
 
Stefan.Haegele Stefan.Haegele ist männlich
myCSharp.de-Mitglied

avatar-3068.jpg


Dabei seit: 13.03.2009
Beiträge: 342
Entwicklungsumgebung: Visual Studio 2010 Ultimat
Herkunft: Untermeitingen


Stefan.Haegele ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von echdeneth:
(ist so konzipiert das es nicht mehr als 4 sind) und 2 Buchstaben, kann/soll nicht getrennt werden.

Nochmals - nur weil es aktuell so ist, sollte man überlegen ob man es nicht doch besser machen kann. Und ja - die Bedingungen mögen aktuell so sein, dies kann sich schnell ändern.

Ist es echt so schwer, hier einfach sauber zu arbeiten und die Daten in Ihrer Urform in 2 Spalten zu speichern? Damit wäre dein Problem sofort erledigt und deine Anwendung wäre auch für die Zukunft gerüstet... Und sollte eine Funktion die Daten in der aktuellen Form benötigen, kannst du diese im SQL Befehl ganz einfach zusammensetzen...

Aber egal - es ist deine Anwendung und deine Entwicklung, ich verabschiede mich aus dieser Diskussion, denn meine Bastelzeiten sind schon ein paar Jahre vorbei... Heute versuche ich sauber zu entwicklen und zu arbeiten und nehme gut gemeinte Ratschläge bzw. Hilfestellungen an!

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Stefan.Haegele am 26.06.2019 16:58.

26.06.2019 16:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
echdeneth echdeneth ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.06.2019
Beiträge: 10
Entwicklungsumgebung: C# / Visual Studio 2017/19
Herkunft: Sachsen

Themenstarter Thema begonnen von echdeneth

echdeneth ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Stefan.Haegele:
Nochmals - nur weil es aktuell so ist, sollte man überlegen ob man es nicht doch besser machen kann. Und ja - die Bedingungen mögen aktuell so sein, dies kann sich schnell ändern.

Ist es echt so schwer, hier einfach sauber zu arbeiten und die Daten in Ihrer Urform in 2 Spalten zu speichern? Damit wäre dein Problem sofort erledigt und deine Anwendung wäre auch für die Zukunft gerüstet... Und sollte eine Funktion die Daten in der aktuellen Form benötigen, kannst du diese im SQL Befehl ganz einfach zusammensetzen...

Update: Habe meinen Chef gefragt und bei diesem Eintrag kann die laufende Nummer separat gespeichert werden. Ursprünglich sollte diese Kundennr. en bloc sein.

Danke
27.06.2019 10:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 20.07.2019 06:59