【问题标题】:How do you escape a column name in Google visualisation API query language?如何在 Google 可视化 API 查询语言中转义列名?
【发布时间】:2018-10-22 16:49:06
【问题描述】:

我有一个 Google 表格,它在以下表达式中生成错误:

=query(Capacity!A5:FE135,"SELECT C,A WHERE "&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0)+2,4),"1","")&" = '"&C2&"' AND "&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0),4),"1","")&" = 1 ORDER BY C")

对于D2 处的单个特定输入值(日期)。

本质上,代码的目的是在第二张表(容量)中找到日期在D2 的列位置,并将该表中该列的值放入当前表中的列C,同时也只选择与第二列匹配的行。但是,当日期设置为特定值时,表达式将不会计算。

将这个庞大的表达式分解成它的组成部分后,发现问题是由这个表达式引起的:

=SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0)+2,4),"1","")

对于违规日期,返回列 BY

这意味着在 Google Visualization API 查询语言中评估的表达式是:

SELECT C,A WHERE BY = '' AND BW = 1 ORDER BY C

但查询语言将BY 视为保留字,而不是列和barfs。

我怎样才能以某种方式转义列名以明确它被视为列名?

【问题讨论】:

    标签: google-visualization google-query-language


    【解决方案1】:

    方法是用反引号将有问题的部分括起来(就像我以前在这里制作文本 monospaced 一样):

    =query(Capacity!A5:FE135,"SELECT C,A WHERE `"&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0)+2,4),"1","")&"` = '"&C2&"' AND `"&SUBSTITUTE(ADDRESS(1,match(D2,Capacity!A1:FE1,0),4),"1","")&"` = 1 ORDER BY C")
    

    所以查询看起来像

    SELECT C,A WHERE `BY` = '' AND `BW` = 1 ORDER BY C
    

    我认为当工作表变得如此之大以至于我们也在列 IF 上时,这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多