Access 2010 SQL Query仅查找全字符串中的部分匹配

时间:2012-05-28 10:26:24

标签: sql ms-access ms-access-2010

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

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

我试图找到与另一个Names表的部分匹配,其中包含一个Name字段 - 这通常是一个简短的名称,如“Sam”或“Evans”,但可能是“Sam Evans”

我尝试过,有和没有*如下

SELECT tblEmployee.FullName, tblNames.Name
FROM tblEmployee, tblNames
WHERE tblEmployee.FullName Like "*" & tblNames.Name & "*"

以及我想要的结果,此查询可以返回我不想要的“Mr. Samson”的Employee FullName。我只想看到结果包含完整的单词“Sam”而不是FullNames和Sam在字符串中的一部分单词。所以我想看看Sam Evans先生和Sam Smith先生以及Sally Evans女士等。

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

编辑 - 解决方案

我已经解决了这个问题 - 只是发布以防万一有类似问题的人。

WHERE " " & tblEmployee.FullName & " " Like "* " & tblNames.Name & " *"

所以基本上通过在Employee Full Name的开头和结尾添加一个空格,我会捕获所有正确的记录。我没有意识到你可以填写这样的领域,但一位同事给我打了电话!

2 个答案:

答案 0 :(得分:3)

SQL和访问中的通配符是%符号;

所以

"SELECT tblEmployee.FullName, tblNames.Name FROM tblEmployee, tblNames
WHERE tblEmployee.FullName Like '%" & tblNames.Name & "%'"

将匹配字符串tblNames.Name

的任何实例

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

修改

道歉,您可以在访问中使用*?,但是您是否将查询作为字符串发送到某些VBA代码?或者试图直接运行它?直接在查询中,它将无法将tblNames.Name字符串解析为查询,您需要从表单或其他代码中传递它。

根据评论进行修改

要选择一个特定单词,只需要一些解决方法:

SELECT * FROM table WHERE field LIKE '* myWord *' OR field LIKE '* myWord.*'

您可以选择开始发送“LIKE”MyWord *' 并用逗号,fullstops,exclamtion标记等词......

您可以执行IN语句并在查找表中包含所有变体,以便将其作为另一个选项轻松维护。

答案 1 :(得分:1)

我使用了Access 2007中编辑过的帖子中的这个解决方案,它完美无缺!

WHERE " " & tblEmployee.FullName & " " Like "* " & tblNames.Name & " *"

现在我的问题是,SQL代码在做什么,为什么它有效?有人可以分解吗?

<强>编辑:

好吧,我的混淆源于Access SQL中的字符与更标准的SQL的不同使用。 &安培;在Access中连接,而+在标准SQL中连接。 *是Access中任意数量字符的通配符,而SQL是%。