Sorting 带有文本和数字的MSAccess排序列
我需要对Access2010查询中的列进行正确排序。它是一个文本列,包含数字字符串,如“CRMPPC1”。该列中的文本长度可能会有所不同 当我把它分类时,它看起来像Sorting 带有文本和数字的MSAccess排序列,sorting,ms-access,text,numbers,Sorting,Ms Access,Text,Numbers,我需要对Access2010查询中的列进行正确排序。它是一个文本列,包含数字字符串,如“CRMPPC1”。该列中的文本长度可能会有所不同 当我把它分类时,它看起来像 CRMPPC1 **CRMPPC10** CRMPPC2 CRMPPC3 CRMPPC4 .... 但我需要的是 CRMPPC1 CRMPPC2 CRMPPC3 CRMPPC4 .... **CRMPPC10** 有人能帮我吗(最好是SQL)?我尝试了各种方法,如VAL、CAST等,但到目前为止没有任何效果。如果文本前缀中的字符
CRMPPC1
**CRMPPC10**
CRMPPC2
CRMPPC3
CRMPPC4
....
但我需要的是
CRMPPC1
CRMPPC2
CRMPPC3
CRMPPC4
....
**CRMPPC10**
有人能帮我吗(最好是SQL)?我尝试了各种方法,如VAL、CAST等,但到目前为止没有任何效果。如果文本前缀中的字符数是可变的,那么我认为没有纯Access SQL解决方案,而是VBA函数
Public Function ExtractNumber(textString As Variant) As Long
Dim s As String, i As Long
s = Nz(textString, "")
For i = 1 To Len(s)
Select Case Mid(s, i, 1)
Case "0" To "9"
Exit For
End Select
Next
If i > Len(s) Then
ExtractNumber = 0
Else
ExtractNumber = Val(Mid(s, i))
End If
End Function
将允许您使用这样的查询
SELECT textTest.*
FROM textTest
ORDER BY ExtractNumber([textColumn]);
尝试使用此“黑客”进行自然顺序排序。它只适用于两个字符,但您当然可以修改它以获得更多 ''仅适用于结尾的最后两个字符数字。如果你有三个数字,它就会断开 函数PadNumberForNatSort(strToMod)作为字符串
If IsNumeric(Right(strToMod, 1)) = True Then
If IsNumeric(Mid(strToMod, Len(strToMod), 1)) = True And IsNumeric(Mid(strToMod, Len(strToMod) - 1, 1)) = True Then
PadNumberForNatSort = strToMod
Else
PadNumberForNatSort = Mid(strToMod, 1, Len(strToMod) - 1) & "0" & Mid(strToMod, Len(strToMod), 1)
End If
Else
PadNumberForNatSort = strToMod
End If
端函数
在您的SQL:ORDER BY PadNumberForNatSort([列名])中,您好,谢谢您的建议。发现此列中也有空字段。可以作为0处理以进行排序。你知道如何将其包含在你的代码中吗??对不起,我对VBAThanks不太熟悉!!工作做得很好。