Hallo,
ich möchte eine sortierung machen!
Hier ein Skript, dass eine Testtabelle mit ein paar Datensätzen erstellt:
CREATE TABLE "public"."t_test" (
"ntestkey" INTEGER NOT NULL,
"number" NUMERIC(9,2),
"string" VARCHAR(20),
"date" TIMESTAMP WITHOUT TIME ZONE,
PRIMARY KEY("ntestkey")
) WITH OIDS;
INSERT INTO t_test (ntestkey, number, string)
VALUES (1, 21.00, 'A1');
INSERT INTO t_test (ntestkey, number, string)
VALUES (2, 21.00, 'A8');
INSERT INTO t_test (ntestkey, number, string)
VALUES (3, 21.00, 'A5');
INSERT INTO t_test (ntestkey, number, string)
VALUES (4, 21.00, 'A9');
INSERT INTO t_test (ntestkey, number, string)
VALUES (5, 21.00, 'A02');
INSERT INTO t_test (ntestkey, number, string)
VALUES (6, 21.00, 'A10');
INSERT INTO t_test (ntestkey, number, string)
VALUES (7, 21.00, 'A00010');
INSERT INTO t_test (ntestkey, number, string)
VALUES (8, 21.00, 'A100');
INSERT INTO t_test (ntestkey, number, string)
VALUES (9, 21.00, 'A13');
INSERT INTO t_test (ntestkey, number, string)
VALUES (10, 21.00, 'A12');
INSERT INTO t_test (ntestkey, number, string)
VALUES (11, 21.00, 'B011');
INSERT INTO t_test (ntestkey, number, string)
VALUES (12, 21.00, 'B15');
INSERT INTO t_test (ntestkey, number, string)
VALUES (13, 21.00, 'B10');
INSERT INTO t_test (ntestkey, number, string)
VALUES (14, 21.00, 'B08');
INSERT INTO t_test (ntestkey, number, string)
VALUES (15, 21.00, 'B7');
Es geht um die Stringfelder.
Diese haben eine gemeinsame eigenschaft ganz rechts Ziffern, ganz links Buchstaben.
Jetzt hätte ich gerne eine Vorgehensweise, besser noch Abfrage, um diese Felder zu sortieren!
Er müsste zunächst die Buchstaben alphabetisch sortieren. Innerhalb gleicher Buchstaben müßte er sich aber die Zahlen ganz rechts anschauen und diese numerisch sortieren.
Das Resultat des obigen Skriptes müßte sein:
A1, A02, A5, A8, A9, A10, A00010, A12, A13, A100, B7, B08, B10, B011, B15
wobei A10 und A00010 “gleichwertig” sind.
hatte mir folgendes überlegt:
select (reguläre suche 1), (reguläre suche 2 ), * from t_test order by 1,2
reguläre suche 2: suche von rechts ausgehend nach dem ersten zeichen, dass keine ziffer ist. “extrahiere” diese zeichen und gib sie als wert zurück
reguläre siche 1: subtrahiere von dem inhalt der spalte string die zeichen aus “reguläre suche 2” und gebe diesen Rest zurück.
Wie formuliere ich nun diese regulären Ausdrücke, oder gibt es eine ganz andere Möglichkeit???
schönen Tag noch
Ingo