Sortuj ciąg jako numer na serwerze sql
Mam kolumnę, która zawiera takie dane. myślniki wskazują wiele kopii tej samej faktury i muszą być posortowane w porządku rosnącym
790711
790109-1
790109-11
790109-2
Muszę posortować go w porządku rosnącym według tego numeru, ale ponieważ jest to pole varchar, sortuje je w porządku alfabetycznym
790109-1
790109-11
790109-2
790711
aby to naprawić, spróbowałem zastąpić - (myślnik) pustym, a następnie rzucając go jako liczbę, a następnie sortując to
select cast(replace(invoiceid,'-','') as decimal) as invoiceSort...............order by invoiceSort asc
podczas gdy to jest lepsze i tak wygląda
invoiceSort
790711 (790711) <-----this is wrong now as it should come later than 790109
790109-1 (7901091)
790109-2 (7901092)
790109-11 (79010911)
Ktoś zasugerował mi podzielenie identyfikatora faktury na - (myślnik) i uporządkowanie na 2 podzielonych częściach
jak =====>order by split1 asc,split2 asc (790109,1)
co by działało, 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łbym funkcji skalarnej.
Czy są jakieś inne podejścia, które można zastosować? Dane są wyświetlane w widoku siatki, a widok siatki nie obsługuje sortowania domyślnie na 2 kolumnach (ale mogę je zaimplementować :)), więc jeśli są tam prostsze podejścia, byłbym bardzo miły.
EDYTOWAĆ : 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 faktorowaniu zapytań sql.