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.

questionAnswers(9)

yourAnswerToTheQuestion