Сортировать строку как число в SQL Server
У меня есть столбец, который содержит такие данные. тире указывают на несколько копий одного и того же счета, и они должны быть отсортированы в порядке возрастания
790711
790109-1
790109-11
790109-2
Я должен отсортировать его в порядке возрастания по этому числу, но так как это поле varchar, он сортирует в алфавитном порядке, как это
790109-1
790109-11
790109-2
790711
чтобы исправить это, я попытался заменить - (тире) на пустой, а затем привести его в число и затем отсортировать
select cast(replace(invoiceid,'-','') as decimal) as invoiceSort...............order by invoiceSort asc
в то время как это лучше и вроде как
invoiceSort
790711 (790711) <-----this is wrong now as it should come later than 790109
790109-1 (7901091)
790109-2 (7901092)
790109-11 (79010911)
Кто-то предложил мне разделить идентификатор счета на - (тире) и упорядочить по 2 разделенным частям
как =====>order by split1 asc,split2 asc (790109,1)
я думаю, что это сработало бы, но как бы я разбил колонку?
Различные функции разделения в Интернете - это те, которые возвращают таблицу, в то время как в этом случае мне потребовалась бы скалярная функция.
Есть ли другие подходы, которые можно использовать? Данные отображаются в виде сетки, а сетка не поддерживает сортировку по 2 столбцам по умолчанию (хотя я могу реализовать это :)), поэтому, если есть более простые подходы, мне было бы очень приятно.
РЕДАКТИРОВАТЬ : Спасибо за ответы на все вопросы. В то время как каждый ответ правильный, я выбрал ответ, который позволил мне включить эти столбцы в сортировку GridView с минимальным перефакторингом SQL-запросов.