AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken VarChar-Feld numerisch sortieren
Thema durchsuchen
Ansicht
Themen-Optionen

VarChar-Feld numerisch sortieren

Ein Thema von BlueStarHH · begonnen am 7. Mär 2018 · letzter Beitrag vom 8. Mär 2018
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#1

VarChar-Feld numerisch sortieren

  Alt 7. Mär 2018, 10:25
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC
Per Default-Verhalten werden Zahlen in VarChar-Feldern wie folgt sortiert:

Code:
1
10
100
2
20
Ich möchte nun aber eine Sortierung in numerischer Reihenefolge:

Code:
1
2
10
20
100
In der Firebird-Hilfe steht, dass man sich eine "collation" mit dieser Sortierung wie folgt anlegen kann:

SQL-Code:
create collation UNICODE_NUM for utf8
from UNICODE_CI_AI 'NUMERIC-SORT=1';
Das wird ohne Problem ausgeführt.

Wenn ich diese collation nun aber einem neuen Feld nutzen möchte, erscheint der folgende Fehler:

SQL-Code:
ALTER TABLE MyTable
ADD MyCol VARCHAR(10) CHARACTER SET UNICODE_NUM
Fehler:
Code:
Undefined name.
Dynamic SQL Error.
SQL error code = -204.
Data type unknown.
CHARACTER SET UNICODE_NUM is not defined.
Was mache ich falsch? Vielen Dank im Voraus!

PS: In meinem Feld stehen sowohl Texte als auch Zahlen und beides auch gemischt (z.B. 100HX12). Deswegen kann ich kein Integer-Feld nehmen.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#2

AW: VarChar-Feld numerisch sortieren

  Alt 7. Mär 2018, 11:08
Du hast eine "collation" erzeugt, für den "CHARACTER SET" utf8.

ALTER TABLE MyTable
ADD MyCol VARCHAR(10) CHARACTER SET utf8 COLLATE UNICODE_NUM

Beim Sortieren kann die "collation" auch angegeben werden.

select * from TABELLE order by FELDNAME collate UNICODE_NUM
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: VarChar-Feld numerisch sortieren

  Alt 7. Mär 2018, 11:40
Danke!

Nun hab ich aber noch ein Problem. Ich benötige das auch für ein ASCII-Feld:

Das Feld ist so definiert:

SQL-Code:
CREATE TABLE MyTable (
    MyCol VARCHAR(10) CHARACTER SET ASCII,
   ...
)
Ich möchte das dann so nutzen:

select * from MyTable order by ASCII_NUM

ASCII_NUM versuche ich so anzulegen:

SQL-Code:
create collation ASCII_NUM for ASCII
from ASCII 'NUMERIC-SORT=1';
Ergibt den Fehler:

Code:
This operation is not defined for system tables. unsuccessful metadata update. Invalid collation attributes.
Im IBExpert wird angezeigt, dass die collation auch ASCII heißt, die zum Character-Set ASCII gehört. Stimmt das nicht?!

Geändert von BlueStarHH ( 7. Mär 2018 um 11:47 Uhr)
  Mit Zitat antworten Zitat
hstreicher

Registriert seit: 21. Nov 2009
220 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: VarChar-Feld numerisch sortieren

  Alt 7. Mär 2018, 12:25
wenn es ohne collations sein darf dann ist CAST dein Freund

select * from myable order by cast(mycol as integer)
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: VarChar-Feld numerisch sortieren

  Alt 7. Mär 2018, 12:44
wenn es ohne collations sein darf dann ist CAST dein Freund

select * from myable order by cast(mycol as integer)
Das funktioniert nicht, denn:

Zitat:
PS: In meinem Feld stehen sowohl Texte als auch Zahlen und beides auch gemischt (z.B. 100HX12). Deswegen kann ich kein Integer-Feld nehmen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: VarChar-Feld numerisch sortieren

  Alt 7. Mär 2018, 12:53
Muss es au DB-Seite sortiert werden?
Wir holen uns die unsortierte Ergebnisliste und sortieren dann auf Client-Seite mit einem eigens entwickelten "Natürliche Sortierung"-Algorithmus.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: VarChar-Feld numerisch sortieren

  Alt 8. Mär 2018, 07:53
Du kannst auch nach links mit 0 auffüllen + dann sortieren:

'00001'
'00002'
'00010'

etc
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: VarChar-Feld numerisch sortieren

  Alt 8. Mär 2018, 08:17
Muss es au DB-Seite sortiert werden?
Ja, da nicht alle Daten zum Client übertragen werden.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: VarChar-Feld numerisch sortieren

  Alt 8. Mär 2018, 08:19
Du kannst auch nach links mit 0 auffüllen + dann sortieren:

'00001'
'00002'
'00010'

etc
Das geht in meinem Fall leider nicht, denn:

Zitat:
PS: In meinem Feld stehen sowohl Texte als auch Zahlen und beides auch gemischt (z.B. 100HX12). Deswegen kann ich kein Integer-Feld nehmen.
Spätestens bei den gemischten Inhalten gibt es dann Probleme und der Anwender wundert sich, was die Nullen sein sollen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz