URL: https://www.overclockers.at/coding-stuff/datenbanken_order_by_bei_einem_string_welcher_zahl_197751/page_1 - zur Vollversion wechseln!
Folgendes problem, ich muss geordnet aus ner datenbank ausgeben =>
"Andi"
"Franz"
"Berni" sortiert er richtig und das passt
"1", "2", ... "10" sortiert er "falsch", da kommt 1, 10, 2, 3, ... dabei raus
wie umgeh ich das ganze? da das feld sowohl zahlen als auch wörter enthält ist ne konvertierung nach integer ned möglich.
thx
semteX
edit: lösungen übers hibernate3 sind natürlich auch sehr willkommen
da du mit einem einfachen cast natürlich sofort in die exception läufst könntest erst noch mit isnumeric überprüfen ob es sich um eine zahl handelt, und dann eben casten.
hth
http://msdn.microsoft.com/de-de/library/ms186272.aspx
edit: sql oder t-sql, oder was anderes?
Ein weiteres Feld mit dem Typ Integer in die Tabelle einfügen. Die Strings kommen dann in das vorhandene Feld, Integer ins Neue. Das Query ist dann ORDER BY stringfeld, integerfeld. Die Position der gelisteten Integers kann dann mit dem Wert des Stringfeldes oder noch allgemeiner mit einer weiteren sortid (1 = string, 2 = integer und dann ORDER BY sortid,stringfeld,integerfeld) reguliert werden.
beides sehr gute lösungen, der einserkandidat war in dem fall allerdings der DKCH via IM:
Im Hibernate mapping kann man bei nem Set angeben, wie es sortiert werden soll. Funktioniert über <set ... sort="package.SuperSortAlgoLoL" </set>
der SuperSortAlgoLoL muss das Interface Comparator implementiern und dann is ma eigentlich scho komplett gerüstet. schaut jetzt so aus:
Code:public class SuperSortAlgoLoL implements Comparator<DivisionBO> { public int compare(DivisionBO d1, DivisionBO d2) { try { Integer i1 = Integer.parseInt(d1.getName()); Integer i2 = Integer.parseInt(d2.getName()); return i1.compareTo(i2); } catch (NumberFormatException nfe) { return d1.getName().compareTo(d2.getName()); } } }
nette lösung, thumbsUp
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025