MS Access:在列中搜索星号

Posted

技术标签:

【中文标题】MS Access:在列中搜索星号【英文标题】:MS Access: searching a column for a star/asterisk 【发布时间】:2009-12-13 06:47:56 【问题描述】:

我正在寻找一种方法来搜索包含* 的字符串数据类型列 - 问题是星号或星号是保留符号。以下查询无法正常工作:

select * from users where instr(pattern,"*")

如何编写 Access 查询来在列中搜索星号?

【问题讨论】:

【参考方案1】:

您可以使用方括号在 Access 中搜索保留字符:

select * from users where pattern like "*[*]*"

【讨论】:

【参考方案2】:

是的,我自己发现的:

select * from users where instr(pattern,chr(42))

【讨论】:

您在哪个版本的访问权限下测试了这个? 2007 年不起作用 它是否应该有一个布尔条件 - 比如where instr(pattern,chr(42)) > 0 从技术上讲,所有非零值都应该返回 TRUE,但我总是指定,因为我认为它更清晰。 “从技术上讲,所有非零值都应该返回 TRUE”——也许我们需要一个名字来给不理解 SQL 中的 NULL 值的人起一个名字;) Null 不是一个值,所以我的陈述就目前而言是正确的(在我看来,you 假设 Null 是一个“值”(而不是简单的 UNKNOWN,因此不进行比较)是不理解 SQL 中的 Null 的证明)。但是您确实指出,如果将 Null 传递给 InStr() 函数,则会返回 Null,并且不会返回 InStr(pattern, Chr(42)) 评估为 Null 的行。在我看来,由于 Null 字段实际上不能包含 Chr(42),这将是一个预期(和理想)的结果。【参考方案3】:

随便用

select * from users where instr(pattern,"*") > 0

来自Access: Instr Function

在 Access 中,Instr 函数返回 第一次出现的位置 另一个字符串中的一个字符串。

【讨论】:

【参考方案4】:

使用 ALIKE 函数,因为它的通配符不包括 *,例如

SELECT * FROM Users WHERE pattern ALIKE '%*%';

(由 DWF 编辑:参见 @onedayone 的 useful explanation of ALIKE)

【讨论】:

想找出 LIKE 和 ALIKE 运算符之间的区别吗?我无法通过 Access 帮助中的一些快速搜索来找到区别。据我从实验中得知,ALIKE 允许使用与 SQL Server 兼容的通配符,而无需将数据库设置为使用 SQL 92 模式。 我通常这样做,但这里的差异无关紧要:您只需要知道 ALIKE 将 * 字符视为文字。有关更多详细信息,请参阅我的其他答案,例如***.com/questions/719115/… 我在您的答案中编辑了对您其他答案的引用(我之前已经看过)。看,我在我认为合适的时候编辑。

以上是关于MS Access:在列中搜索星号的主要内容,如果未能解决你的问题,请参考以下文章

MS Access Query 以检索订单日期列中最新日期的记录

MS Access 查询:合并特定字段列中具有相同数据的行

在列中插入默认值(访问数据库)

MS Access sql将5个表与列中的奇怪字符分组

MS-Access查询以在另一列中收集逗号分隔的结果

如何从 MS ACCESS 数据库中的特定行和列中获取值?