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 标准,在大多数数据库中都会失败。
我在 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)。它用于执行各种模糊搜索。
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 标准,在大多数数据库中都会失败。