Classificando campo de texto de registros ADO como numérico
Pergunta
Usando VBA Eu tenho um conjunto de funções que retornam um ADODB.Recordset
onde todas as colunas como adVarChar
. Infelizmente isso significa numerics se classificados como texto. Então 1,7,16,22 se torna 1,16,22,7
Existe algum método que pode classificar numerics como colunas de texto sem recorrer a mudar o tipo da coluna?
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
NB: Estou usando Project 2003 e Excel 2003 e referenciando Microsoft ActiveX DataObject 2.8 Biblioteca
Solução
pad Esquerda com Zeros com pelo menos tantos como máximo de dígitos numéricos. por exemplo.
0001 0010 0022 1000
Você pode usar $ Direita () para fazer isso.
Outras dicas
função
Use o Val () para classificar numericamente em uma coluna de texto. Exemplo:
SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow