Orderby包含一个包含部件号和部分字母的字符串

时间:2014-10-14 17:00:15

标签: sql-server vb.net ado.net

我正在使用MSSQL ADO.NET,我需要通过雇主代码按商业顺序排序,尽管每个订单代码前面都有2个字母。

例如:

HP1234
HP1233
HP1236

基本上我试图通过asc或desc分隔字母和顺序中的数字,只是用数字来给出一些顺序。我想知道是否有人可以通过一个有序的条款来建议一个好方法。

2 个答案:

答案 0 :(得分:0)

SELECT *
FROM YourTable
ORDER BY CONVERT(int, RIGHT(employer_code, LEN(employer_code) - 2))

答案 1 :(得分:0)

注意我没有添加任何错误检查,但如果模式更改等,这将有所帮助。即使这是C#,您也可以将代码转换为VB。

void Main()
{
    var arrayOfString = new string []{"HP1234","HP1233","HP1236"};
    var pat =@"(?<name>\d+)";
    Regex r = new Regex(pat, RegexOptions.IgnoreCase);
    var orderedItems =  arrayOfString.OrderBy(x=>{
        var match =  r.Match(x);

        return match.Groups["name"].Value;
    });

    foreach (var item in orderedItems)
    {
        Console.WriteLine(item);
    }

}

VB代码

Private Sub Main()
    Dim arrayOfString = New String() {"HP1234", "HP1233", "HP1236"}
    Dim pat = "(?<name>\d+)"
    Dim r As New Regex(pat, RegexOptions.IgnoreCase)
    Dim orderedItems = arrayOfString.OrderBy(Function(x) GetSortOrder(x,r))

    For Each item As string In orderedItems
        Console.WriteLine(item)
    Next

End Sub

Function GetSortOrder(x , r)    
    Dim match = r.Match(x) 
    Return match.Groups("name").Value
End Function