簡體   English   中英

包含包含的 Excel VBA SQL 語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM