Access 2010 SQL 查询仅在全字字符串中查找部分匹配

Posted

技术标签:

【中文标题】Access 2010 SQL 查询仅在全字字符串中查找部分匹配【英文标题】:Access 2010 SQL Query find partial match in string of full word only 【发布时间】:2012-05-28 10:26:24 【问题描述】:

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

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

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

我试过喜欢,有和没有*如下

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

除了我想要的结果外,这个查询还可以返回我不想要的“Mr. Samson”的员工全名。我只想看到包含完整单词“Sam”的结果,而不是包含 Sam 的 FullNames 在字符串中某个单词的一部分。所以我想见见 Sam Evans 先生、Sam Smith 先生和 Sally Evans 女士等。

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

编辑 - 解决方案

我已经解决了这个问题 - 只是发布以防万一它可能对遇到类似问题的人有所帮助。

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

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

【问题讨论】:

【参考方案1】:

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 *' 以及带有逗号、句号、感叹号等的单词...

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

【讨论】:

感谢您的回复。我现在在 Access 2010 查询中运行它以获得正确的结果。然后我将在 VBA 代码中执行 SQL 字符串并将结果插入另一个表中。 * 将返回名称作为其任何部分的所有字段 - 但我希望它是搜索字符串中的一个完整单词。 刚刚根据您的 cmets 进行了编辑 - 基本上您可以使用通配符和搜索词之间的空格将其过滤为一个单词。 谢谢,我也尝试了所有这些组合,但它仍然返回部分字符串,例如Samson Smith 先生作为“Sam”的一部分返回,但如果我只有“Sam”,则不会返回 Simon Sam 先生,因为末尾没有空格。 对不起 - 点击返回太快了!有可能按照我想要的方式做吗?还是我需要弄清楚如何将名称字段拆分为单独的完整单词并将它们存储在各个字段中? 在我的初始帖子中添加了解决方案【参考方案2】:

我使用了 Access 2007 中编辑过的帖子中的这个解决方案,效果很好!

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

现在我的问题是,SQL 代码到底在做什么,为什么会起作用?有人能破解吗?

已编辑:

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

【讨论】:

以上是关于Access 2010 SQL 查询仅在全字字符串中查找部分匹配的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Access 2010 中的 SQL 存储过程返回多个记录集

Microsoft Access 数据库引擎 2016 - 在 2010 中正常工作的某些 SQL 查询出现问题

ACCESS 2010 SQL 没有返回数据。 SQL 返回数据相同的查询

Access 2010 中的 LookupRecord 数据块不接受 SQL

Access 2010 SQL - 更新查询不起作用

MS access 2010 SQL查询帮助