Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access Microsoft Access字符串解析_Ms Access_Vba - Fatal编程技术网

Ms access Microsoft Access字符串解析

Ms access Microsoft Access字符串解析,ms-access,vba,Ms Access,Vba,在MS Access 2003中,我在一列中有以下值 0-0-60 20-0-0-24S 20.5-0-0-24S 32-0-0 如何编写查询以便从列中提取第三项,例如“0-0-60”中的“60”。请记住,我还可以选择第4列。我相信在查询生成器工具上使用这样的内联表达式可以完成这项工作(未经测试) 你会在每一列中少于3项吗 真的,如果你有3个小数或4个小数的非常具体的格式作为值,我会考虑把你的模式变成 Value1 decimal Value2 decimal Value3 decimal V

在MS Access 2003中,我在一列中有以下值

0-0-60
20-0-0-24S
20.5-0-0-24S
32-0-0

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

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


你会在每一列中少于3项吗

真的,如果你有3个小数或4个小数的非常具体的格式作为值,我会考虑把你的模式变成

Value1 decimal
Value2 decimal
Value3 decimal
Value4 decimal (NULLABLE)
但这有点离题了


如果您真的遇到了这个问题,那么在代码中进行解析可能比在Access SQL查询中执行一些令人讨厌的左/右/instr工作要快得多

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;

祝你好运

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

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


如果您打算在应用程序的查询中执行此操作,那么我建议您研究规范化并相应地更改模式。

您不应该将多个值放在同一列中。这是众所周知的反模式,乔尔很棒。谢谢你的评论。然而,我没有创建这个专栏,它是别人给我的。我会确保将您的sage建议传递给作者。这将检索最后一个值-当有四个值时,这将不起作用。我将始终至少有3项。您还将希望为其提供更好的名称,并处理错误-尤其是“下标超出范围”。
SELECT SplitString([MyField]) AS Expr1
FROM MyTable;