![]() |
Datenbank: Firebird • Version: 2,5+ • Zugriff über: direkt
Firebird SQL sortieren mit SIMILAR TO
Guten Morgen,
ich müsste folgende Inhalte in einer Tabellenspalte sortieren 2 , 10 ,10.1, 10a, 12, 12.1a, 14, 20 usw. Frage ich ChatGPT schlägt er mir regexp vor. Ok klingt logisch Firebird hat dies aber nicht, sondern "SIMILAR TO". Hat damit schon einmal jemand was gemacht? Ich komme nicht weiter. Die Kombination z.b 10a oder 12.1a bekomme ich nicht hin. Das müsste ja dann ca so aussehen :
Code:
SELECT ENTRY
FROM TABELLE order by CASE WHEN ENTRY SIMILAR TO '[[:DIGIT:]].[[:DIGIT:]]' THEN CAST ENTRYAS INTEGER) WHEN ENTRY SIMILAR TO '[[:DIGIT:]][a-z]' THEN ENTRY .... ELSE CAST(ENTRY AS INTEGER) END; |
AW: Firebird SQL sortieren mit SIMILAR TO
was soll denn dein gewünschtes sortierergbenis sein
|
AW: Firebird SQL sortieren mit SIMILAR TO
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Code:
...probier mal. (ich habs nicht getestet :wink:)
SELECT text_column
FROM your_table ORDER BY CAST(SUBSTRING(text_column FROM '^[0-9]+') AS INTEGER), SUBSTRING(text_column FROM '[^0-9]+'); |
AW: Firebird SQL sortieren mit SIMILAR TO
Hört sich erstmal an, als würde eine NUMERIC-SORT COLLATION das bieten.
|
AW: Firebird SQL sortieren mit SIMILAR TO
Zitat:
Aber Uwe gibt einen guten Tipp: mit
Code:
kann dann so
CREATE COLLATION UNICODE_NUMERIC
FOR UTF8 FROM UNICODE CASE INSENSITIVE 'NUMERIC-SORT=1';
Code:
sortiert werden.
SELECT entry FROM tabelle ORDER BY entry COLLATE UNICODE_NUMERIC
|
AW: Firebird SQL sortieren mit SIMILAR TO
Ich würde die Strings passend umbauen (zumindest fürs Sortieren):
0000002.0000 0000010.0000 0000010.1000 0000010.a000 0000012.0000 0000012.1a00 0000014.0000 0000020.0000 |
AW: Firebird SQL sortieren mit SIMILAR TO
Zitat:
Oder man benutzt einen berechneten Index. Aber was spricht gegen die Collation? P.S.: ein Problem bei "SILIMAR TO" ist, dass die Regex das ganze Feld matchen muss. Teilstrings werden nicht gefunden. Wenn Deine Regex nach "Ziffern Punkt Buchstaben" sucht, wird "Ziffern Punkt Buchstaben Ziffern" nicht gefunden. |
AW: Firebird SQL sortieren mit SIMILAR TO
* wenn es keinen
Delphi-Quellcode:
gibt, einen
.
Delphi-Quellcode:
hinten anhängen
.
* links mit
Delphi-Quellcode:
füllen, also gewünschte Anzahl minus Position des
0
Delphi-Quellcode:
(könnte man bestimmt LPAD für nutzen und einen Leerstring um die gewünschten x Nullen erweitern)
.
* und zuletzt hinten via RPAD mit weiteren
Delphi-Quellcode:
füllen
0
Wäre es nicht einfacher direkt ein "natual sort" zu verwenden? [edit] Jupp, siehe #5 ![]() ![]() Zitat:
Delphi-Quellcode:
kein Punkt sondern ein Irgendwas ist?
.
[edit] Stimmt ja, SIMILAR war kein RegEx, sondern was Eigenes und hier isses das
Delphi-Quellcode:
. :oops:
_
Zitat:
Schneidet CAST eigentlich ab oder knallt es, wenn es kein Integer ist? |
AW: Firebird SQL sortieren mit SIMILAR TO
Zitat:
Lösung a la Delphi:
Code:
CREATE FUNCTION StrToIntDef(str VARCHAR(20), def INTEGER = 0)
RETURNS INTEGER AS BEGIN RETURN CAST(str AS INTEGER); WHEN ANY DO RETURN def; END |
AW: Firebird SQL sortieren mit SIMILAR TO
Hallo zusammen,
vielen Dank für die Antworten. Ich werde nachher einmal ein paar testen. Der Inhalt der Spalten ist nicht von uns sondern von einem Fremdsystem auf welches wir zugreifen. Edit : collate hat einwandfrei funktioniert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 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 by Thomas Breitkreuz