Access 2010 SQL 查询仅在完整单词的字符串中查找部分匹配

Roc*_*oad 5 sql ms-access ms-access-2010

我希望这是一个简单的,我只是找不到如何获得我想要的结果,也许我在 SQL 中使用了错误的关键字?

我正在搜索包含全名字段的员工表,该字段可以是“Sam”或“Evans 先生”或“Sam Evans 先生”

我正在尝试查找与另一个包含名称字段的名称表的部分匹配 - 这通常是一个短名称,例如“Sam”或“Evans”,但也可能是“Sam Evans”

我尝试过,带和不带 * 如下

SELECT tblEmployee.FullName, tblNames.Name
FROM tblEmployee, tblNames
WHERE tblEmployee.FullName Like "*" & tblNames.Name & "*"
Run Code Online (Sandbox Code Playgroud)

除了我想要的结果之外,此查询还可以返回我不想要的“Mr. Samson”的员工全名。我只想查看包含完整单词“Sam”的结果,而不是字符串中单词的一部分包含 Sam 的全名。所以我想见萨姆·埃文斯先生、萨姆·史密斯先生和莎莉·埃文斯女士等。

我希望这是有道理的。非常感谢您的帮助

编辑-解决方案

我已经解决了这个问题 - 只是发布以防它可以帮助任何有类似问题的人。

WHERE " " & tblEmployee.FullName & " " Like "* " & tblNames.Name & " *"
Run Code Online (Sandbox Code Playgroud)

因此,基本上通过在员工全名的开头和结尾添加一个空格,我可以捕获所有正确的记录。我没有意识到你可以填充这样的字段,但一位同事向我透露了消息!

Rem*_*ima 3

SQL和access中的通配符是一个%符号;

所以

"SELECT tblEmployee.FullName, tblNames.Name FROM tblEmployee, tblNames
WHERE tblEmployee.FullName Like '%" & tblNames.Name & "%'"
Run Code Online (Sandbox Code Playgroud)

将匹配字符串的任何实例tblNames.Name

您只能在开头或结尾使用%来分别获取字符串开头/结尾的匹配。

编辑

抱歉,您可以按照预期使用*and in access,但是您是否将查询作为字符串发送到某些 VBA 代码??或者尝试直接运行它?由于直接在查询中,它无法将tblNames.Name字符串解析到查询中,您需要从表单或其他代码段中传递该字符串。

根据评论进行编辑

要选择特定的单词,只需做一些处理:

SELECT * FROM table WHERE field LIKE '* myWord *' OR field LIKE '* myWord.*'
Run Code Online (Sandbox Code Playgroud)

您可以选择捕获句子“LIKE 'MyWord *”的开头以及带有逗号、句号、感叹号等的单词...

作为另一种选择,您可以执行 IN 语句并在查找表中包含所有变体,以使其易于维护。