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

Fnd 2nd occourance of a string in a Memo Field

我有一个名为 "Worklog" 的备注字段。 我的 table 名字是: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:' & "*"  ));

我不是 100% 确定这有多有效,但我建议您尝试一下。

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 仍然是基于零的,如果你想要基于一个,然后将 inVar 更改为 inVar + 1 在代码中。

Split 函数会根据标识符将巨大的备忘录字段拆分成更小的数据块,在您的例子中 'User ID: '。由于我们只关心第二个用户 ID,因此我们只需使用该索引(因为 Split 给出了一个从零开始的拆分数据数组)。

但是正确的解决方案;就是忘掉这个可怕的备忘录字段,并创建一个带有适当状态代码和字段的日志 table。