Сортировка текстового поля набора записей ADO как числового
Вопрос
Используя VBA, у меня есть набор функций, которые возвращают ADODB.Recordset
где все столбцы в виде adVarChar
.К сожалению, это означает, что цифры сортируются как текст.Таким образом, 1,7,16,22 становится 1,16,22,7
Существуют ли какие-либо методы, которые могут сортировать цифры в виде текстовых столбцов, не прибегая к изменению типа столбца?
Sub TestSortVarChar()
Dim strBefore, strAfter As String
Dim r As ADODB.RecordSet
Set r = New ADODB.RecordSet
r.Fields.Append "ID", adVarChar, 100
r.Fields.Append "Field1", adVarChar, 100
r.Open
r.AddNew
r.Fields("ID") = "1"
r.Fields("Field1") = "A"
r.AddNew
r.Fields("ID") = "7"
r.Fields("Field1") = "B"
r.AddNew
r.Fields("ID") = "16"
r.Fields("Field1") = "C"
r.AddNew
r.Fields("ID") = "22"
r.Fields("Field1") = "D"
r.MoveFirst
Do Until r.EOF
strBefore = strBefore & r.Fields("ID") & " " & r.Fields("Field1") & vbCrLf
r.MoveNext
Loop
r.Sort = "[ID] ASC"
r.MoveFirst
Do Until r.EOF
strAfter = strAfter & r.Fields("ID") & " " & r.Fields("Field1") & vbCrLf
r.MoveNext
Loop
MsgBox strBefore & vbCrLf & vbCrLf & strAfter
End Sub
Примечание:Я использую Project 2003 и Excel 2003 и ссылаюсь Библиотека Microsoft ActiveX DataObject 2.8
Решение
Левая панель с нулями и, по крайней мере, с максимальным количеством цифр.например ,
0001 0010 0022 1000
Вы можете использовать Right $() для достижения этой цели.
Другие советы
Используйте функцию Val() для числовой сортировки по текстовому столбцу.Пример:
SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);
Не связан с StackOverflow