为什么我不能在 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,然后在那里使用完整的平台的功能。
我有一个 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,然后在那里使用完整的平台的功能。