【问题标题】:Excel VBA SQL Statement with Contains包含包含的 Excel VBA SQL 语句
【发布时间】: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=% 是我需要的提示。非常感谢!

标签: sql excel vba contains


【解决方案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 完美配合
猜你喜欢
  • 1970-01-01
  • 2011-06-09
  • 2014-06-03
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 2014-06-14
  • 2011-02-13
  • 2021-10-30
相关资源
最近更新 更多