首先,我一直在研究this related stack post,但是它无法解决我的问题。
当我在MS Access 365查询窗口中运行以下查询时,按预期获得了97条记录:
SELECT *
FROM Prices
WHERE OptionID Like '*_*'
我的目标是返回OptionID
包含下划线的所有记录。成功。
当我在MS Access 365查询窗口中运行以下查询时,我按预期获得109,967条记录:
SELECT *
FROM Prices
只有97个OptionID中带有下划线,因此,如预期的那样,上述第一个查询中的where子句将记录集限制为97个记录。
这是棘手的地方。
当我在C#应用中运行此查询时,通过OleDb连接到Access:
SELECT *
FROM Prices
WHERE OptionID Like '*_*'
...我得到0条记录。原因是因为通配符时,通过OleDb的Access SQL必须使用%
而不是*
。因此,我这样做:
SELECT *
FROM Prices
WHERE OptionID Like '%_%'
...我得到109,967条记录。好像where clause
被忽略了!我相信发生的是OleDb会将下划线解释为单字符通配符本身,因此没有进行过滤。
这就是我的问题摘要:我无法弄清楚如何(通过OleDb)告诉Access我要使用下划线作为文字而不是通配符,而该通配符用{{1}包围}中的通配符查询。怎么做? (我尝试使用%
和\
转义下划线,但没有骰子。)
答案 0 :(得分:2)
将下划线放在“字符范围”内,并用方括号定界。然后,Access将理解您希望将其视为文字下划线字符,而不是与任何单个字符匹配的ANSI 92模式(与OleDb一起使用)通配符。
WHERE OptionID Like '%[_]%'