在备注字段中查找字符串的第二次出现
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。
我有一个名为 "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。