Pošto je ovo pitanje postavljeno u ovom, a ne u SQL odeljku, i pošto je aplikacija rađena u VB .NET-u, pretpostavljam da je potrebno VB .NET rešenje.
Moje rešenje podrazumeva da se iz naziva parsiranjem izdvoji broj potreban za sortiranje i upiše u novu kolonu. Ovo doduše podrazumeva i to da je struktura podataka uvek ovakva kakva je u primeru koji ste zadali.
Primer:
Code:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Kreiram DataTabelu
Dim DataTable1 As DataTable = New DataTable()
DataTable1.Columns.Add(New DataColumn("Id", Type.GetType("System.Int32")))
DataTable1.Columns.Add(New DataColumn("DelovodniBroj", Type.GetType("System.String")))
'Ručno popunjavam DataTabelu onako kako bih je dobio SQL upitom
Dim dRow As DataRow
dRow = DataTable1.NewRow()
dRow(0) = 1
dRow(1) = "ABV-1"
DataTable1.Rows.Add(dRow)
dRow = DataTable1.NewRow()
dRow(0) = 2
dRow(1) = "ABV-10"
DataTable1.Rows.Add(dRow)
dRow = DataTable1.NewRow()
dRow(0) = 3
dRow(1) = "ABV-17"
DataTable1.Rows.Add(dRow)
dRow = DataTable1.NewRow()
dRow(0) = 4
dRow(1) = "ABV-2"
DataTable1.Rows.Add(dRow)
dRow = DataTable1.NewRow()
dRow(0) = 5
dRow(1) = "ABV-20"
DataTable1.Rows.Add(dRow)
dRow = DataTable1.NewRow()
dRow(0) = 6
dRow(1) = "ABV-2-1"
DataTable1.Rows.Add(dRow)
dRow = DataTable1.NewRow()
dRow(0) = 7
dRow(1) = "ABV-3"
DataTable1.Rows.Add(dRow)
'DataTabeli dodajem kolonu po kojoj ćemo sortirati podatke
DataTable1.Columns.Add(New DataColumn("RedBr", Type.GetType("System.Int32")))
'Popunjavam kolonu po kojoj ćemo sortirati podatke parsiranjem
Dim broj As String
For i As Integer = 0 To DataTable1.Rows.Count - 1
dRow = DataTable1.Rows(i)
'U privremenu promenljivu odvajamo deo posle prvog znaka "-"
broj = dRow("DelovodniBroj").ToString().Substring(dRow("DelovodniBroj").ToString().IndexOf("-") + 1)
'Ako u privremenoj promenljivoj postoji još jedan znak "-" odsecamo taj deo
If broj.Contains("-") Then
broj = broj.Substring(0, broj.IndexOf("-"))
End If
'Broj koji smo dobili konvertujemo u ceo broj i upisujemo ga u polje po kome ćemo sortirati tabelu
dRow("RedBr") = Convert.ToInt32(broj)
Next
'Sortiramo
DataTable1.DefaultView.Sort = "RedBr"
DataGridView1.DataSource = DataTable1.DefaultView
End Sub
Drugi način može biti da se npr. traži prvi karakter koji je broj i, ako postoji, prvi naredni koji nije, pa da se uzima taj srednji deo i konvertuje u ceo broj.