0

Access2010 クエリで列を正しく並べ替える必要があります。「CRMPPC1」のような数字の文字列を含む Textcolumn です。テキストの長さは、列内で異なる場合があります。

並べてみるとこんな感じ

CRMPPC1
**CRMPPC10**
CRMPPC2
CRMPPC3
CRMPPC4
....

しかし、私が必要なのは

CRMPPC1
CRMPPC2
CRMPPC3
CRMPPC4
....
**CRMPPC10**

誰か助けてくれませんか (できれば SQL で)。VAL、CASTなどのさまざまなアプローチを試しましたが、これまでのところ何も機能しません。

4

2 に答える 2

1

テキストプレフィックスの文字数が可変の場合、純粋な 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]);
于 2013-04-17T09:16:21.523 に答える
0

この「ハック」を使って自然順序ソートを試してみてください。2 人のキャラクターに対してのみ機能しますが、もちろんそれ以上のキャラクターに変更できます。

'''' は、末尾の最後の 2 文字の数字でのみ機能します。数字が 3 つある場合は壊れます'''''''

関数 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([column_name])

于 2014-04-21T21:13:32.270 に答える