我编写了一些Javascript代码,并尝试从MS Access数据库中获取数据。
我可以使用select *
语句从表中获取但无法执行类似查询。
我使用以下查询:
strQuery = "SELECT * FROM Sheet1 WHERE (((Sheet1.Name) Like '*i*'))";
结果显示未找到记录,如果我将其替换为以下内容:
strQuery = "SELECT * FROM Sheet1 WHERE (((Sheet1.Name) = 'i'))";
这很有效。
有人可以帮我吗?
答案 0 :(得分:0)
与许多模式匹配函数不同,SQL LIKE
运算符中“零个或多个任何字符”的标准通配符为%
,而不是*
。
因此,如果其他函数使用模式*i*
,则标准SQL WHERE
子句将
WHERE (((Sheet1.Name) Like '%i%'))
根据this documentation page,Access实际上在不同的情况下使用两组不同的通配符,它们称为“ANSI-89”和“ANSI-92”(可能是指不同的SQL标准,尽管这似乎一件奇怪的事情已经改变了):
Access支持两组通配符,因为它支持两种结构化查询语言标准 - ANSI-89和ANSI-92。通常,在对Access数据库运行查找或查找和替换操作时,请使用ANSI-89通配符。在对Access项目运行查询时,使用ANSI-92通配符 - 访问连接到Microsoft SQL Server数据库的文件。由于SQL Server使用ANSI-92标准,因此Access项目也使用ANSI-92标准。但是,Access也提供该规则的例外。
不知道Access,这对我来说真的不清楚,但似乎在ANSI-89语法中,通配符确实是*
,所以在某些情况下您的查询是正确的,但您所使用的特定设置是使用“ANSI-92”模式,因此它需要是%
的版本。
关于这个问题还有进一步的讨论:Microsoft Jet wildcards: asterisk or percentage sign?不同之处似乎在于你是否正在与DAO或ADO联系,这对我来说都是希腊人并让我头疼。