Excel VBA SQL 语句包含

Excel VBA SQL Statement with Contains

我在 Excel 中有一个 table,我想用它通过 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))

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

当您查询其他数据源(Excel、Access、Oracle...)时,

Contains不可用。

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

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

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

请注意,不同的数据库系统对区分大小写有不同的规则。查询 Excel 不区分大小写,所以 like %t%like %T% return 结果相同。这与其他数据库不同。

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