包含包含的 Excel VBA SQL 语句

Posted

技术标签:

【中文标题】包含包含的 Excel VBA SQL 语句【英文标题】:Excel VBA SQL Statement with Contains 【发布时间】:2021-12-21 22:10:14 【问题描述】:

我在 Excel 中有一个表,我想用它来通过 SQL 获取一些度量值。

这是我的代码的第一部分,可以正常工作:

Option Explicit

Sub mysql()

    Dim cn As Object, rs As Object, output As String, sql As String

    Set cn = CreateObject("ADODB.Connection")
    With cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & _
        "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
        .Open
    End With

现在我可以获取具有特定条件的条目数量,例如:

sql = "SELECT COUNT(ID) FROM [Data$] WHERE [Type] = ""myType"" and [Status] = ""myStatus"""
Set rs = cn.Execute(sql)
MsgBox (rs(0))

现在我想使用 CONTAINS 条件,但这不起作用:

sql = "SELECT COUNT(ID) FROM [Data$] WHERE CONTAINS([Type], ""T"")"
Set rs = cn.Execute(sql)
MsgBox (rs(0))

【问题讨论】:

您尝试过使用 LIKE 吗? 这返回一个 0 但至少没有错误:sql = "SELECT COUNT(ID) FROM [Data$] WHERE [Type] LIKE ""T"""我还有语法问题吗? 您可能需要通配符,例如%T% wildcard=% 是我需要的提示。非常感谢! 【参考方案1】:

Contains 是 SQL Server 中可用的非标准 SQL 函数(请参阅https://docs.microsoft.com/en-us/sql/t-sql/queries/contains-transact-sql?view=sql-server-ver15)。它用于执行各种模糊搜索。

Contains 在查询其他数据源(Excel、Access、Oracle...)时不可用。

如果只是查找子串,可以使用like-运算符,并使用%作为通配符,例如

sql = "SELECT COUNT(ID) FROM [Data$] WHERE [Type] like '%T%' "

'%T%' 将找到包含字母 T 的任何内容'T%' 将找到以字母 T 开头的任何内容'%T' 将找到以字母 T 结尾的任何内容 (这当然不限于单个字符,如果你愿意,可以使用'%overflow%')。

请注意,不同的数据库系统有不同的区分大小写规则。查询 Excel 不区分大小写,因此 like %t%like %T% 返回相同的结果。这在其他数据库上有所不同。

顺便说一句,您应该养成在 SQL 语句中使用单引号作为常量文本的习惯。双引号在 Excel 中有效,但不是 SQL 标准,在大多数数据库中都会失败。

【讨论】:

感谢您澄清有关 CONTAINS 的问题。它现在与 LIKE 完美配合

以上是关于包含包含的 Excel VBA SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

vba 判断一个单元格中是不是包含某个字符串 有则执行后面的语句

excel2010 sql完全应用怎么样

excel里可以使用sql语句吗

Excel中的VBA - 如果语句计数器不起作用

如何将 SQL 语句结果导出到 Excel 文件

如何在Excel,VBA中执行SQL语句?