Mam kolumnę, która zawiera dane takie jak ta. kreski wskazują obsługujący kilka kopii tej samej fakturze, a te muszą być uporządkowane w kolejności rosnącejSortuj ciąg znaków jako numer w serwerze sql
790711
790109-1
790109-11
790109-2
muszę uporządkować je w kolejności rosnącej od tego numeru, ale ponieważ jest to pole varchar sortuje w kolejności alfabetycznej, jak ten
790109-1
790109-11
790109-2
790711
w celu ustalenia tego próbowałem wymiany - (myślnik) z pusta, a następnie rzucając go jako liczby, a następnie sortowania na tym
select cast(replace(invoiceid,'-','') as decimal) as invoiceSort...............order by invoiceSort asc
wHI le to jest lepsze i rodzaju jak ten
invoiceSort
790711 (790711) <-----this is wrong now as it should come later than 790109
790109-1 (7901091)
790109-2 (7901092)
790109-11 (79010911)
ktoś zaproponował mi podzielić na fakturze id - (myślnik) i porządku przez na 2 części podzielonych
jak =====>order by split1 asc,split2 asc (790109,1)
Który działałby myślę, ale jak podzielić kolumnę.
Różne funkcje podziału w Internecie to te, które zwracają tabelę, podczas gdy w tym przypadku wymagałoby to funkcji skalarnej.
Czy istnieją inne podejścia, które można zastosować? Dane są wyświetlane w widoku siatki, a widok siatki nie obsługuje domyślnie sortowania na 2 kolumnach (mogę to zaimplementować :)), więc jeśli są jakieś prostsze podejścia, byłoby bardzo miło.
EDYTOWANIE: dzięki za wszystkie odpowiedzi. Chociaż każda odpowiedź jest poprawna, wybrałem odpowiedź, która pozwoliła mi na włączenie tych kolumn do sortowania GridView przy minimalnym ponownym uwzględnianiu zapytań sql.
Myślę, że to pokazuje dobitnie dlaczego przechowywanych wartości powinna zmienić .... –
Dlaczego chcesz 790109-11 przyjść przed 790109-2? –