Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 带有文本和数字的MSAccess排序列_Sorting_Ms Access_Text_Numbers - Fatal编程技术网

Sorting 带有文本和数字的MSAccess排序列

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等,但到目前为止没有任何效果。如果文本前缀中的字符

我需要对Access2010查询中的列进行正确排序。它是一个文本列,包含数字字符串,如“CRMPPC1”。该列中的文本长度可能会有所不同

当我把它分类时,它看起来像

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不太熟悉!!工作做得很好。