Benutzer mit den meisten Antworten
Zahlen sortieren die in einem varchar(50) liegen

Frage
-
Hi, wie sortiere ich am besten folgende Zahlenwerte aufsteigend, die in einer SQL Tabelle in einem varchar liegen.
Ich habe in der Tabelle
1
2
..
9
10
11
12
...
20
21...
A 1
A 2
C1
c2
d1usw.
drin, wenn ich jetzt order by Spalte asc selektiere bekomme ich
1
10
100
11
110
12
13
2
20
usw.
ich muss aber irgendwie
1
2
3
4
...
10
11
haben. Ich stelle die Daten anschließend in einem Grid dar.Wie bewerkstellige ich das am besten?
Gruss
Antworten
-
Hallo Thomas,
Nur sind natürlich jetzt die Ascii Datensätze (wie A1,C23,D6) nicht dabei.
schrieb ich ja, dass die dann fehlen.
WITH SortedValues( <Spalte>, Type, RowNumber ) AS ( SELECT <Spalte>, 1 AS Type, ROW_NUMBER() OVER( ORDER BY CONVERT( int, Value ) ) FROM <Tabelle> WHERE ISNUMERIC( <Spalte> ) = 1 UNION ALL SELECT <Spalte>, 2 AS Type, ROW_NUMBER() OVER( ORDER BY Value ) FROM <Tabelle> WHERE ISNUMERIC( <Spalte> ) = 0 ) SELECT * FROM SortedValues ORDER BY Type, RowNumber
sollte das gewünschte ausgeben.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stefan FalzModerator Freitag, 21. Januar 2011 12:03
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 27. Januar 2011 07:14
Alle Antworten
-
Hallo Thomas,
Hi, wie sortiere ich am besten folgende Zahlenwerte aufsteigend, die in einer SQL Tabelle in einem varchar liegen.
gar nicht. Es wäre viel sinnvoller, Zahlen auch aus Zahl zu speichern. Dann kann man die auch problemlos sortieren.
In deinem Fall hast Du zwar die Möglichkeit, eine Konvertierung der Zahlenwerte vorzunehmen aber dann fallen natürlich alle alphanumerischen Werte beim SELECT raus.
SELECT * FROM <Tabelle> WHERE ISNUMERIC( <Spalte> ) = 1 ORDER BY CONVERT( int, <Spalte> )
Mittels UNION kriegt man die Daten IIRC auch nicht wieder zusammen. Man kann aber eine Function schreiben, die die Werte nacheinander sortiert in eine Table Variable schreibt (ggfs. mit einem zusätzlichen Feld, damit man hinterher auch weiß, was nun als Zahl und was als String geschrieben wurde)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hi Stefan, danke für die Zahlen innerhalb der Spalte klappt es mit obigen. Nur sind natürlich jetzt die Ascii Datensätze (wie A1,C23,D6) nicht dabei.
Jetzt müßte ich die noch irgendwie anschließend noch mal auslesen und diese 2 Datasets mergen, damit ich die ins Grid bekomme?
-
Hallo Thomas,
Nur sind natürlich jetzt die Ascii Datensätze (wie A1,C23,D6) nicht dabei.
schrieb ich ja, dass die dann fehlen.
WITH SortedValues( <Spalte>, Type, RowNumber ) AS ( SELECT <Spalte>, 1 AS Type, ROW_NUMBER() OVER( ORDER BY CONVERT( int, Value ) ) FROM <Tabelle> WHERE ISNUMERIC( <Spalte> ) = 1 UNION ALL SELECT <Spalte>, 2 AS Type, ROW_NUMBER() OVER( ORDER BY Value ) FROM <Tabelle> WHERE ISNUMERIC( <Spalte> ) = 0 ) SELECT * FROM SortedValues ORDER BY Type, RowNumber
sollte das gewünschte ausgeben.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort vorgeschlagen Stefan FalzModerator Freitag, 21. Januar 2011 12:03
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 27. Januar 2011 07:14