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

Why can I not use character ranges ('[a-z]') in SQL 'LIKE' queries on an ODBCConnection object in 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 连接运行,而是按字面解释。

例如,下面的查询将return 0条记录:

ODBCConnection.CommandText = _
"SELECT Column1 FROM [Worksheet2$] WHERE Column2 LIKE '%[^a-z]keyword[^a-z]%'"

如果'keyword'是Column1中的常用关键字,这应该return条记录,因为它搜索被非字母字符包围的关键字。

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

Excel ODBC 驱动程序与 SQL 服务器分开,不符合 ANSI SQL。它不支持此构造,并且 不是 fully-featured 数据库引擎 。相反,它应该被视为访问 Excel 数据的简单功能,例如导入或导出数据。文本 ISAM 驱动程序(CSV 和 Tab-separated 文件)也是如此。

Excel ODBC 驱动程序不使用完全相同的语法并且不支持范围 a-z 构造,您必须列出所有字符,因此而不是 [^a-z] 你可以使用 "[!abcdefghijklmnopqrstuvwxyz]"

然而,最好的解决方法可能是简单地使用 Excel 驱动程序将数据从 Excel 电子表格复制到另一个数据库,例如 MDB (Microsoft JET) 或 SCE (SQL Compact Edition) 数据库,您可以在其中使用更全面的功能。

当然,如果您正在使用 fully-fledged SQL 服务器,那么显而易见的解决方案是将数据复制到分段 table,然后在那里使用完整的平台的功能。