我有一个名为“Worklog”的备忘录字段。 我的表名是:MissingT。 我想运行一个查询,它可以找到一个特定的字符串,然后获取该特定字符串后面的后6位数字。
字符串如下所示:
Status: Work in Progress
Submitted: December 5, 2014 - 8:44:53 AM EST
Approval Status: Approved
Date Approved: December 5, 2014 - 8:44:53 AM EST
SECTION 1 - REQUESTER PROFILE
User ID: xxx111
Name: Some, Name
Phone #: 999-999-999
Region: Canada
SECTION 2 - AUTHORIZED INDIVIDUAL PROFILE
User ID: xxx222
Name: Some, name2
Phone #:999-999-9999
Title: Manager
我希望查询在第2部分下获取用户ID。我当前的查询在第1部分下找到用户ID并获取其后的6个字符串(xxx111)。如何移动查询以获取第二次出现的字符串“User ID”以及后面的6个字符串。
UPDATE MissingT SET MissingT.AuthManager = mid([Worklog],(InStr([Worklog],'User ID: ')+8),7)
WHERE (((MissingT.[worklog]) Like "*" & 'User ID:' & "*" ));
答案 0 :(得分:1)
我不是百分之百确定这可能有多高效,但我建议你去玩这个。
UPDATE
MissingT
SET
MissingT.AuthManager = SplSplit([Worklog], 'User ID: ', 1, 7)
WHERE
MissingT.[worklog] Like "*User ID:*";
SplSplit是一个UDF,类似于
Public Function SplSplit(inpStr As String, _
findStr As String, _
inVar As Integer, _
lenVar As Integer)
SplSplit = Left(Split(inpStr, findStr)(inVar), lenVar)
'If you want it to be ONE based then change it to the following.
'SplSplit = Left(Split(inpStr, findStr)(inVar+1), lenVar)'
End Function
inpStr 是您传递的备注字符串, findStr 是您要用于将其分成多个部分的字符串模式, inVar 是您要查找的数据的位置,最后 lenVar 是您需要收集的长度。
注意:inVar仍然是基于ZERO的,如果您想要基于ONE,则在代码中将 inVar 更改为 inVar + 1 。
在您的案例“用户ID:”中,拆分功能会根据标识符将巨大的备忘录字段分成较小的数据块。由于我们只关心第二个用户ID,因此我们只使用该索引(因为Split提供了基于零的拆分数据阵列)。
然而,正确的解决方案;将忘记这个可怕的备注字段并创建一个包含适当状态代码和字段的日志表。