sql - 为什么我不能在 Excel 2010 中对 ODBCConnection 对象的 SQL ('[a-z]' 查询中使用字符范围 'LIKE' )?

标签 sql vba excel odbc excel-2010

我有一个 Excel 工作表,其中包含一个列表,该列表通过在宏中使用列表的 ODBC 连接填充,使用以下属性:

ListObject.QueryTable.WorkbookConnection.ODBCConnection

它被配置为连接到自己的工作簿,因为我有另一个包含大量数据的工作表:
ODBCConnection.Connection = "ODBC;DSN=Excel Files;" & _
    "DBQ=" & ThisWorkbook.FullName & ";" & _
    "DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"

然后,为了利用这个连接,可以进行 SQL 查询,例如:
ODBCConnection.CommandText = _
"SELECT Column1 FROM [Worksheet2$] WHERE Column2 LIKE '%query%'"

问题在于这些 SQL 查询与 SQL Server 2008 标准不匹配。在这篇文章 (https://msdn.microsoft.com/en-us/library/ms179859.aspx) 中指出,LIKE 表达式可能包含字符范围,例如[a-z][^a-z] .这些在 ODBC 连接中不按预期运行,而是按字面解释。

例如,以下查询将返回 0 条记录:
ODBCConnection.CommandText = _
"SELECT Column1 FROM [Worksheet2$] WHERE Column2 LIKE '%[^a-z]keyword[^a-z]%'"

如果 'keyword' 是 Column1 中的常用关键字,则应返回许多记录,因为它会搜索由非字母字符包围的关键字。

有没有人经历过这种情况并找到解决方法?谢谢!

最佳答案

Excel ODBC 驱动程序与 SQL Server 是分开的,并且不符合 ANSI SQL。它不支持这种结构,是 不是 一个功能齐全的数据库引擎。相反,它应该被视为访问 Excel 数据的简单功能,例如导入或导出数据。文本 ISAM 驱动程序(CSV 和制表符分隔文件)也是如此。

Excel ODBC 驱动程序不使用完全相同的语法并且不支持范围 a-z构造,你必须列出所有的字符,所以而不是 [^a-z]您可以使用 "[!abcdefghijklmnopqrstuvwxyz]"
然而,最好的解决方法可能是简单地使用 Excel 驱动程序将数据从 Excel 电子表格复制到另一个数据库,例如 MDB (Microsoft JET) 或 SCE (SQL Compact Edition) 数据库,您可以在其中使用更全面的功能.

当然,如果您使用的是成熟的 SQL 服务器,那么显而易见的解决方案是将数据复制到临时表中,然后使用平台的全部功能在那里使用它。

关于sql - 为什么我不能在 Excel 2010 中对 ODBCConnection 对象的 SQL ('[a-z]' 查询中使用字符范围 'LIKE' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34809197/

相关文章:

php - 搜索没有撇号的词(有撇号的)

mysql - 在 SQL 中连接来自同一个表的两个外键

sql - Oracle SQL 趋势 MTD 数据

vba - 使用当前行的记录填充用户表单

excel - 在 VBA 中优化 HTML 解析

vba - 在 VBA 中创建带有集合的类

sql - 在 Postgres 中加入同一张表的不止一种路径

vba - 如果位于表单中的第一条/最后一条记录,如何禁用导航按钮

mysql - ADODB 连接 : UDF using ADODB works fine when called from VBA code, 的有趣问题,但从 EXCEL 单元格调用时返回错误

python - 使用python从Excel工作表中提取图像