我创建了一个MS Access 2013查询,在查询中我有一个使用LIKE运算符的表达式 . 然后,我创建一个Excel 2013工作簿并选择此Access数据库作为数据源,并选择包含LIKE表达式的查询 . 问题是它在将数据返回到excel时似乎不喜欢LIKE表达式 . 从Access内部运行查询时,它显示正确的结果 .
所以,如果我有一个看起来像这样的表达式
iif([CAR] like "*A*", True,False)
当在Access中运行查询时,它将返回表中的所有CAR并显示true或false,具体取决于CAR字段中的字符串 . 但是,当将此查询设置为Excel数据源时,它仅返回导致false的结果(CAR字段字符串中没有A)
我知道Excel不使用LIKE运算符,但我认为Access中的查询生成结果,Excel只使用结果 .
如果您需要澄清问题,请在评论中提问 .
1 回答
在Access SQL-89模式下,
*
用作通配符,以匹配零个或多个字符的任何序列 . SQL-89模式是查询设计器和从DAO运行的查询的Access默认值 .但Access也支持SQL-92模式,它使用
%
而不是*
作为通配符 . 如果您使用ADO从Excel运行查询,则它使用SQL-92模式 .您可以做至少3件事来获得您期望在Excel中获得的结果:
IIf([CAR] Like "%A%", True,False)
- 在查询中使用此表达式可在Excel中获得预期结果 . 缺点是在Access会话中运行查询时可能看不到相同的结果 .IIf([CAR] ALike "%A%", True,False)
-Alike
(而不是Like
)表示数据库引擎期望%
而不是*
作为通配符,无论查询是从SQL-89还是92模式运行 . 所以这个表达式应该在Access和Excel中给你相同的结果 .IIf(InStr(1, [CAR], "A", 1) > 0, True, False)
-InStr
不依赖外卡字符,因此应该在Access和Excel中提供相同的结果 .