【发布时间】:2019-09-12 02:14:25
【问题描述】:
首先,我一直在研究this related stack post,但是一直没能解决我的问题。
当我在 MS Access 365 查询窗口中运行以下查询时,我按预期获得了 97 条记录:
SELECT *
FROM Prices
WHERE OptionID Like '*_*'
我的目标是返回 OptionID 包含下划线的所有记录。成功。
当我在 MS Access 365 查询窗口中运行以下查询时,我得到了预期的 109,967 条记录:
SELECT *
FROM Prices
我的 OptionID 中只有 97 个有下划线,因此上面第一个查询中的 where 子句将记录集限制为 97 条记录,正如预期的那样。
这就是棘手的地方。
当我在我的 C# 应用程序中运行此查询时,通过 OleDb 连接到 Access:
SELECT *
FROM Prices
WHERE OptionID Like '*_*'
...我返回 0 条记录。原因是因为通过 OleDb 访问 SQL 必须使用% 而不是* 时使用通配符。那么我这样做:
SELECT *
FROM Prices
WHERE OptionID Like '%_%'
...我得到 109,967 条记录。好像where clause 被忽略了!我认为正在发生的是 OleDb 将下划线解释为单字符通配符本身,因此不会发生过滤。
因此我的问题总结如下:我不知道如何告诉 Access(通过 OleDb)我想使用下划线作为文字而不是通配符,由 % 包围通配符查询。它是如何完成的? (我尝试用\ 和\\ 转义下划线,但没有骰子。)
【问题讨论】:
-
您可以尝试将其括在方括号中 `LIKE '%[_]%'`。否则,您也可以尝试将其作为参数传递给查询。