我需要过滤很多关键词。有没有办法让下面的查询更短?
我需要查找包含以下关键字词的字段。我可以使用任何不同的方式,只要我可以做同样的事情。随着时间的推移,我希望有更多的关键词。
IIf([2CP].[commodity description] Like ('*SCRAP*')
Or [2CP].[commodity description] Like ('*PART*')
Or [2CP].[commodity description] Like ('*MIL*')
Or [2CP].[commodity description] Like ('*Material*')
Or [2CP].[commodity description] Like ('*PTS*')
Or [2CP].[commodity description] Like ('*SDDC*')
Or [2CP].[commodity description] Like ('*SEAT*')
Or [2CP].[commodity description] Like ('*FOOD*')
Or [2CP].[raw_cmd_desc] Like ('*SCRAP*')
Or [2CP].[raw_cmd_desc] Like ('*PART*')
Or [2CP].[raw_cmd_desc] Like ('*MIL*')
Or [2CP].[raw_cmd_desc] Like ('*Material*')
Or [2CP].[raw_cmd_desc] Like ('*PTS*')
Or [2CP].[raw_cmd_desc] Like ('*SDDC*')
Or [2CP].[raw_cmd_desc] Like ('*SEAT*')
Or [2CP].[raw_cmd_desc] Like ('*FOOD*')
Or [2CP].[raw_cmd_desc] Like ('*lorries motorcycles bicycles Foods*')
Or [2CP].[raw_cmd_desc] Like ('*lorries*')
Or [2CP].[shipper name] Like ('*SCRAP*')
Or [2CP].[shipper name] Like ('*PART*')
Or [2CP].[shipper name] Like ('*MIL*')
Or [2CP].[shipper name] Like ('*SDDC*')
Or [2CP].[shipper name] Like ('*FOOD*')
Or [2CP].[shipper name] Like ('*Hoegh*')
Or [2CP].[shipper name] Like ('*NYK*')
,1,0)
答案 0 :(得分:0)
考虑一个VBA用户定义的函数,它接收字段值作为参数并循环遍历所有关键字的表列表(没有星号)。美丽也是如果至少存在一个 True ,方法退出循环和函数,并且不需要检查所有其他值。
VBA 功能(保存在标准模块中)
Public Function FindString(commodityParam As String, raw_cmdParam As String, shipperParam As String) As Boolean
Dim rst As Recordset
Dim tmp As Boolean
Set rst = CurrentDb.OpenRecordset("SELECT keyword FROM KeyWordsTable")
Do While Not rst.EOF
If commodityParam Like "*" & rst!keyword & "*" _
Or raw_cmdParam Like "*" & rst!keyword & "*" _
Or shipperParam Like "*" & rst!keyword & "*" Then
tmp = True
GoTo ExitFunction
End If
rst.MoveNext
Loop
ExitFunction:
rst.Close
Set rst = Nothing
TestLoop = tmp
End Function
SQL (VBA函数可用于任何SQL查询)
-- SELECT WITH CALCULATED COLUMN
SELECT *, FindString([commodity description], [raw_cmd_desc], [shipper name]) As Output
FROM [2CP];
-- SELECT WITH WHERE CONDITION
SELECT * FROM [2CP]
WHERE FindString([commodity description], [raw_cmd_desc], [shipper name]) = True;
-- APPEND QUERY
INSERT INTO (ID, BooleanValue)
SELECT ID, FindString([commodity description], [raw_cmd_desc], [shipper name])
FROM [2CP];
-- UPDATE QUERY
UPDATE [2CP]
SET BooleanValue = FindString([commodity description], [raw_cmd_desc], [shipper name]);
-- DELETE QUERY
DELETE FROM [2CP]
WHERE FindString([commodity description], [raw_cmd_desc], [shipper name]) = TRUE;