![]() |
Datenbank: Firebird • Version: 2.5.4 • Zugriff über: IBO
String richtig sortieren
Hallo,
Ich habe in einer Tabelle ein Feld als Varchar deklariert. Hier drin stehen unter anderem folgende Werte: 1 10 2 3 30 3a 10.1 2a 2b usw. Wie bekomme ich es hin das die Reihenfolge wie folgt aussieht. 1 2 2a 2b 3 10 10.1 30 Habt Ihr da eine Lösung? in Excel gibt es die Lösung: Alles was wie eine Zahl aussieht als Zahl formatieren. Danke schon mal im voraus. Ein Hilfsfeld wäre auch kein Problem. Habe ich eh schon angelegt. |
AW: String richtig sortieren
Machs doch genauso
SQL-Code:
select
<Feldliste> from <Tabelle> order by cast( <Spalte> as BigInt); |
AW: String richtig sortieren
Excel nutzt standardmäßig ein "NaturalSort", ebenso wie der Explorer.
Aber standardmäßig wird fast immer nur der Typ sorttiert, also bei Integern/Floats geht es (solange sie nicht als String sortiert werden) und bei Strings werden die Chars meistens Ordinal sortiert. (bei Datenbanken manchmal aber auch noch mit einer deklarierten CodePage dazwichen, siehe "Collation") Eine Funktion ala "NaturalSort" zerlegt den String in Einzelteile und vergleicht "nummerische Anteile" als Zahl und nicht als String. Ob/Wo sich soeine Funktion bei dir versteckt ... ![]() [edit] @mkinzler: Bei "3a" wird aber bestimmt nicht so ganz richtig funktionieren? Aber bei den Beispielwerten könnte man "a", "b", "c" usw. auch in Nachkommastellen übersetzen (a=.01, b=.02 ... z=.26) und dann mit dem NUMERIC-CAST arbeiten. |
AW: String richtig sortieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Walter,
hab da eben mal ein wenig mit herumgespielt. Die Lösung von MKinzler funktioniert nicht, weil die Spalte nicht nur Ziffern enthält. Die Idee mit der Hilfs-Spalte führt dagegen zum Ziel:
Code:
Gehen wir mal davon aus, daß in deiner Spalte NUMMER die ursprüglichen Werte stehen. Nun legst du eine zweite Tabelle des Typs Numeric an und verschiebst dorthin die Ziffern-Anteile des Strings aus der Nummernspalte, so daß in NUMMER nur noch a, b oder '' steht, in der Wertespalte dagegen 1, 10.1 usw. Danach kannst du das ganze so ausgeben, wie du es dir vorgestellt hast
CREATE TABLE TABTEST (
ID_TABTEST INTEGER NOT NULL, NUMMER VARCHAR(10) DEFAULT '' NOT NULL COLLATE UNICODE, WERT NUMERIC(5,2) DEFAULT 0 Zitat:
|
AW: String richtig sortieren
Entschuldigt, da geht mir der Hut hoch!
Entweder der Feldinhalt ist numerisch oder ein Text. da sollte man sich vorher entscheiden und dementsprechend sortieren. Erreicht man das gewünschte Ergebnis nicht, könnten z.B. führende Nullen weiter helfen. Kommt man so immer noch nicht zum Ziel, stellt sich die Frage ob das gewählte Format überhaupt das richtige ist. Gruß K-H |
"Wort zum Sonntag"
Zitat:
Es spricht ja im Grunde nichts dagegen, den eigenen Programmierstil insgeheim für den weltweit besten zu halten. Das tun hier offenbar viele, sollte aber deren Privatvergnügen bleiben bzw. ihren eigenen selbstedukatorischen Zwecken dienen. Doch anderen ihren eigenen Stil auf diese Weise madig machen zu wolllen, indem man eine starke emotionale Reaktion ("mir geht der Hut hoch" impliziert Wut oder Zorn, zumindest aber große Verärgerung) demonstriert, um damit beim Gegenüber eine entsprechende Reaktion hervorzurufen, ist meines Empfindens nach nicht wirklich angebracht, zumal nicht nur in diesem Fall jegliche Sachargumentation vollständig ausbleibt. Wie mir einmal Daniel – absolut berechtigt – auf eine ähnliche Reaktion meinerseits erwiderte, vergrault man damit empfindsame User, und das macht ja nun wohl gar keinen Sinn. Aus meiner Sicht empfiehlt es sich daher, die Themen hier und auch in anderen Foren mit dem gebührenden emotionalen Abstand zu betrachten, und wenn das nicht gelingt, die daraus resultierenden unkontrollierbaren Reaktionen für sich zu behalten. Man trägt sonst lediglich die eigenen innere Konflikte an Leute heran, die damit nicht das Geringste zu tun haben und daher auch nichts damit anzufangen wissen – außer eben emotional darauf zu reagieren ... und wohin das führt, wissen wir alle nur zu gut. Ich weiß aus eigener Erfahrung ziemlich genau, worüber ich hier schreibe. _________________________________ Und nun zurück zum Thema: Welche Anforderungen beim TE genau vorliegen bzw. weshalb er in seiner Tabelle diese Werte genau so stehen hat oder haben muß, wissen wir nicht. Fakt ist jedoch erst einmal, daß er diese Tabellen-Inhalte so, wie sie nunmal vorliegen, zu sortieren wünscht. Mir fällt im Augenblick außer der genannten Methode keine weitere ein, die das Problem des TE zu lösen imstande wäre. Ich hatte einmal ein ähnliches Problem, da wollte der Kunde Artikelnummern, die stets mit Buchstaben begannen und mit Ziffern endeten, auf dieselbe Weise sortiert haben. Das war nur zu machen, indem man Buchstaben- und Ziffernanteile in zwei Spalten verwaltete und diese bei Reports wieder zusammensetzte. Vielleicht klärt uns ja der TE noch darüber auf, was genau dahintersteckt, wäre aber für die Lösung des Problems nicht unbedingt notwendig. |
AW: String richtig sortieren
Meistens ist es im echten Leben so, das man sich die Gegebenheiten nicht aussuchen kann, sondern sich mit ihnen arrangieren muss. Hier ist es eben so, das eine Spalte nach bestimmten Regeln sortiert werden muss, die sich nicht so ohne weiteres umsetzen lassen.
Da muss man durch. PS: Auch zum Thema: Muss es eine Firebird/DB-Lösung sein? Das ist nicht so leicht. In Delphi schreibt man einfach eine Vergleichsfunktion und kann das dann mal eben schnell sortieren. |
AW: String richtig sortieren
Es handelt sich hierbei um ein Gebührenverzeichnis für Heilpraktiker. Leider hat man 1987, so alt ist das Verzeichnis, nicht an EDV gedacht. Man möchte aber die Sortierung so haben wie Sie in Buchform gedruckt ist.
Ich weiß nicht welcher Dämon hier p80286 ergriffen hat, so emotional zu reagieren. Ich hatte nicht die Absicht hier eine sinnlose Diskussion loszutreten sondern habe lediglich um eine Lösung gebeten. Ich hätte vielmehr von p80286 eine vernünftige Lösung erwartet, als sich hier völlig daneben zu benehmen. Ich werde mal den Vorschlag von Perlsau testen und über das Ergebnis berichten. |
AW: String richtig sortieren
Diese Art der Daten wird eben von keinem Standard-Sortierer abgedeckt.
Wenn man diese Daten mal aufbricht, dann hat man so etwas
Delphi-Quellcode:
Somit müsste ein immer korrekt funktionierender Sortier-Algorithmus vorher den Wert parsen und dann nach den einzelnen Teilen sortieren.
TFoo = record
Section: array of integer; SubSection: string; end; Eine immer korrekt funktionierende Sortierung für diese Daten kann also nur in der Anwendung selber erfolgen oder man erstellt sich eine UDF, die den Wert sortierfreundlich umwandelt.
Code:
1 => 001
10 => 010 2 => 002 3 => 003 30 => 030 3a => 003 a 10.1 => 010.001 2a => 002 a 2b => 002 b |
AW: String richtig sortieren
Spricht etwas dagegen eine weitere Spalte als Suchfeld hinzuzufügen ?
Dann müsste man nur einmal mit einem speziellen Algorithmus drüberlaufen und diese nach beliben Setzen, danach könnte man schnell per z.B. Integer-Feld sortieren. Rollo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz