database - Access DB 中的字符串排序

标签 database ms-access

我有一个带有字段版本的数据库。可能有许多记录具有相同的版本字符串,因此要提取我拥有的版本,我执行以下操作:

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/

相关文章:

c# - EF 加入 5 个大表 - Include() 方法优化

mysql - 在 "external"数据库上创建帐户

sql - 在单个选择语句中有条件地对同一列求和多次?

ms-access - 使用 QueryDefs 返回 Recordset 时出错

ms-access - 如何关闭(卸载)表单

mysql - 存储多个日期范围

php - 在PHP中获取意外的文件结束错误

vba - 如何处理490错误?

mysql - Excel文件到mysql

ms-access - MS Access - 使用 "Filter by Form"时更改表单外观