我有一个带有字段版本的数据库。可能有许多记录具有相同的版本字符串,因此要提取我拥有的版本,我执行以下操作:
SELECT DISTINCT tblSample.Version
FROM tblSample
ORDER BY tblSample.Version DESC;
这里是示例数据:
tblSample.Version
1.1.1000
1.2.1654
1.15.1223
1.2.1654
1.1.1000
执行查询后得到的结果:
1.2.1654
1.15.1223
1.1.1000
我想要得到的是(因为15显然> 2和1):
1.15.1223
1.2.1654
1.1.1000
还应考虑其他八位字节。
最佳答案
基本上,如果您想对 x 进行排序
并在 y 上执行不同
,您需要首先执行不同(因此是子查询)
使用以下函数(修改自 fredg's answer in this thread ) 注意:该函数使用 split我认为在这里合适的功能。
Public Function ParseText(TextIn As String, X) As Variant
On Error Resume Next
Dim var As Variant
var = Split(TextIn, ".", -1)
ParseText = var(X)
End Function
你可以写这个SQL语句
SELECT t.Version
FROM
( SELECT Distinct tblSample.Version
FROM tblSample.Version) t
ORDER BY
Cint(ParseText([t.Version],0)) DESC ,
Cint(ParseText([t.Version],1)) DESC ,
Cint(ParseText([t.Version],2)) DESC;
更新 正如汉斯厄普指出的那样。您还需要强制转换为 int 才能正确排序。您可以在 SQL 中执行此操作(如我更新的答案所示),也可以在 ParseText 中执行此操作并返回 int
关于database - Access DB 中的字符串排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6027618/