Microsoft Access字符串解析

时间:2009-04-16 20:35:29

标签: vba ms-access access-vba

在MS Access 2003中,我在列

中包含以下值
0-0-60
20-0-0-24S
20.5-0-0-24S
32-0-0

如何编写查询以便我可以从列中提取第3项,例如“0-0-60”中的“60”。请记住,我也可以选择第4列。

4 个答案:

答案 0 :(得分:3)

您需要将此函数概括为分隔符和位置,但是:

Public Function SplitString(inputString As String) As String
    Dim TestArray() As String
    TestArray = Split(inputString, "-")
    Debug.Print TestArray(2)
    SplitString = TestArray(2)
End Function

您可以在此查询中调用:

SELECT SplitString([MyField]) AS Expr1
FROM MyTable;

祝你好运!

答案 1 :(得分:1)

每列中的项目是否少于3个?

真的,如果您有一个非常具体的3位小数或4位小数的格式作为值,我会考虑将您的架构更改为

Value1 decimal
Value2 decimal
Value3 decimal
Value4 decimal (NULLABLE)

但这有点不合时宜......

如果你真的遇到了这个问题,那么解析你的代码可能比在Access SQL Query中做一些令人讨厌的左/右/ instr工作更快

答案 2 :(得分:0)

您发现查询数据列非常重要的事实就是我们所说的“气味”。

这看起来与第一范式(1NF)违规完全相同,因为您在单个列中有非标量数据。我相信你正在将这些值拆分为一次性数据清理练习,以便一劳永逸地解决问题(在这种情况下,如果结果集很小,我个人会使用Excel的文本到列功能)。

如果您建议在查询应用程序时执行此操作,那么我建议您研究规范化并相应地更改架构。

答案 3 :(得分:-1)

我相信查询构建器工具上的这样的内联表达式可以完成这项工作(未经测试)。

right(yourColumnNam, inStrRev(yourColumnName, '-'))