我正在使用MSSQL ADO.NET,我需要通过雇主代码按商业顺序排序,尽管每个订单代码前面都有2个字母。
例如:
HP1234
HP1233
HP1236
基本上我试图通过asc或desc分隔字母和顺序中的数字,只是用数字来给出一些顺序。我想知道是否有人可以通过一个有序的条款来建议一个好方法。
答案 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