在备注字段中查找第二次出现的字符串

时间:2015-01-12 13:35:14

标签: access-vba

我有一个名为“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:' & "*"  ));

1 个答案:

答案 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提供了基于零的拆分数据阵列)。

然而,正确的解决方案;将忘记这个可怕的备注字段并创建一个包含适当状态代码和字段的日志表。

相关问题