包含包含的 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 语句的主要内容,如果未能解决你的问题,请参考以下文章