在MS Access 2003中,我在列
中包含以下值0-0-60
20-0-0-24S
20.5-0-0-24S
32-0-0
如何编写查询以便我可以从列中提取第3项,例如“0-0-60”中的“60”。请记住,我也可以选择第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, '-'))