Art string als Zahl in sql server

Habe ich eine Spalte, die Daten enthält wie dieses. Striche zeigen an mehreren Kopien der gleichen Rechnung und müssen diese in aufsteigender Reihenfolge sortiert werden

790711
790109-1
790109-11
790109-2

ich habe zu Sortieren (in aufsteigender Reihenfolge) von dieser Nummer, aber da dies ein varchar-Feld sortiert in alphabetischer Reihenfolge, wie diese

790109-1
790109-11
790109-2
790711

um dieses Problem zu beheben ich habe versucht, ersetzen Sie den Gedankenstrich (- ) mit leeren und dann Gießen Sie es als Zahl und dann die Sortierung auf, dass

select cast(replace(invoiceid,'-','') as decimal) as invoiceSort...............order by invoiceSort asc

dies ist zwar besser und ordnet so

            invoiceSort
790711      (790711)   <-----this is wrong now as it should come later than 790109
790109-1    (7901091)
790109-2    (7901092)
790109-11   (79010911)

Jemand schlug vor, zu mir zu split-Rechnung-id auf dem - (Bindestrich ) und um auf die 2 Teile aufgeteilt

wie=====> order by split1 asc,split2 asc (790109,1)

welche arbeiten würde ich denken, aber wie sollte ich das aufteilen der Spalte.

Den verschiedenen split-Funktionen auf der internet-sind diejenigen, die eine Tabelle zurückgeben, während in diesem Fall würde ich die Skalare Funktion.

Gibt es andere Ansätze, die verwendet werden können? Die Daten im grid und der grid-Ansicht nicht unterstützt Sortieren nach 2 Spalten standardmäßig ( kann ich umsetzen, es aber nicht 🙂 ) also, wenn einer einfacheren Ansätze sind da, ich wäre sehr nett.

BEARBEITEN : vielen Dank für all die Antworten. Während jede Antwort richtig ist, die ich gewählt habe, die Antwort, die mir erlaubte, zu integrieren, und diese Spalten in der GridView-Sortierung mit minimalen re-factoring des sql-Abfragen.

  • Ich denke, das ausführlich zeigt, warum Ihre gespeicherten Werte sollten sich ändern....
  • Warum willst du 790109-11 zu kommen, bevor 790109-2?
InformationsquelleAutor Pankaj Kumar | 2013-05-01
Schreibe einen Kommentar