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:在列中搜索星号的主要内容,如果未能解决你的问题,请参考以下文章