【问题标题】:Using VBA to remove the alias name from an SQL query string?使用 VBA 从 SQL 查询字符串中删除别名?
【发布时间】:2015-09-18 19:10:50
【问题描述】:

我有一个 SQL 查询字符串。在这个字符串中有多个不同的数据列,都来自同一个表。为简单起见,这里有一个简短的示例:SELECT 'A'.'B', 'A'.'C', 'A'.'D' 其中'A' 是别名。我的问题是:有没有办法使用 VBA 来获取该查询字符串,并删除别名 'A' 的所有实例并只返回数据列 'B', 'C', 'D'? 请不要完整的代码,我喜欢起点。我喜欢自己填写。它有助于学习过程。

【问题讨论】:

  • 删除这些别名的目的是什么?如果有 2 个具有相同列名的表,您的查询将失败,因为它对于从哪个表中提取哪个列的引擎来说太模糊了。别名有助于定义哪一列是正确的。
  • 您的示例 SQL 信息错误。单引号不用于表和列别名。另外,用您实际使用的数据库标记您的问题。
  • 我想我应该更清楚。我知道别名在使用查询时很重要并且需要,但我只需要 'B','C','D' 字段用于其他目的。我为歧义道歉。 (这个网站还是有点新的)
  • @GordonLinoff 谢谢。我对SQL不太了解。我刚刚以与我拥有的字符串相同的格式编写了那个简短的示例。我只是用简单的字母替换了敏感信息。

标签: mysql sql-server vba excel


【解决方案1】:
  1. 像这样恢复 QueryTable 下的 SQL:

恢复 SQL:

Range("A1").Select 'Your query worksheet
With Selection.QueryTable
    queryText = .CommandText
End With
  1. 然后将别名替换为LEFTRIGHTINSTRRegExp 对象(如果您想学习一些有用的东西并快速使用RegExp - 正则表达式)。如果您需要示例正则表达式,请在 cmets 中告诉我。如果你想在 VBA 中学习正则表达式,我发了一个tutorial here

  2. 替换查询并刷新QueryTable

替换和刷新查询

Range("A1").Select 'Your query worksheet
With Selection.QueryTable
    .CommandText = queryText
    .Refresh BackgroundQuery:=False
End With

【讨论】:

  • 谢谢。我相信这是我需要的。
【解决方案2】:

您是直接从表格中选择吗?除非您在查询中执行某些功能,否则直接从表中获取列名。另一种选择是:

选择 [A] AS columnName、[B] AS ColumnName2 等

【讨论】:

    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2016-12-12
    • 1970-01-01
    • 2023-04-10
    • 2011-02-02
    相关资源
    最近更新 更多