[英]Excel VBA SQL Statement with Contains
我有一個 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))
Contains
是 SQL Server 中可用的非標准 SQL 函數(請參閱https://docs.microsoft.com/en-us/sql/t-sql/queries/contains-transact-sql?view=sql-server-第 15 版)。 它用於執行各種模糊搜索。
查詢其他數據源(Excel、Access、Oracle...)時, Contains
不可用。
如果你只是尋找一個子字符串,你可以使用like
-operator 並使用%
作為通配符,例如
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 標准,在大多數數據庫中都會失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.