【问题标题】:Google Sheets date query won't work on specific columnsGoogle 表格日期查询不适用于特定列
【发布时间】:2019-12-03 16:28:09
【问题描述】:

我有从 Salesforce 导入的数据,并且我正在使用查询函数来查找任何列的日期在给定范围内的所有行。以下是数据示例:

不工作的查询是:

=query('Salesforce Data'!A2:C,"SELECT A,C WHERE C >= date '"&TEXT(DATEVALUE($A$1),"yyyy-mm-dd")&"' AND C < date '"&TEXT(DATEVALUE($B$1),"yyyy-mm-dd")&"'")

我使用的是相同的查询,除了在一种情况下,它查看 B 列中的日期,而在另一种情况下,它查看 C 列中的日期。B 列版本有效,C 列版本无效。我已经验证 C 列中至少有一个日期在该范围内,因此它不应该是没有数据的问题,正如错误所暗示的那样:

我查看了数据格式,在这方面 B 列和 C 列之间没有区别。这些也是 Salesforce 中相同类型的字段,因此我不希望在格式上有所不同。我尝试手动将 C 列中的第一个值更改为日期(这是列之间的明显差异),但这也没有用。

【问题讨论】:

  • 分享您的工作表副本以及所需输出的示例

标签: google-sheets google-sheets-formula array-formulas google-sheets-query google-query-language


【解决方案1】:

经过大量试验和错误后,我发现了问题:Google 表格似乎根据大多数单元格对数据列进行分类。因此,即使 B 列和 C 列都有一些具有有效日期的单元格和一些具有 - 表示 null 的单元格,但 B 列的日期多于字符串,但 C 的字符串多于日期,因此日期比较查询将不起作用C 列。

我现在的解决方案是添加一个公式表以将所有空值 - 转换为不会影响我的查询的日期 1970 年 1 月 1 日:

示例公式: =IF( OR('Salesforce Data'!C2="-",'Salesforce Data'!C2=""), date(1970,1,1), 'Salesforce Data'!C2)

另一种解决方案是编辑数据源,但此解决方案将完全在工作表中工作。

另外请注意,我将这个公式拖到远低于我需要的位置,以防万一,确保如果您有一个文本列(例如我的 A 列),则将那里的空值替换为某种垃圾文本。起初我用0 替换,然后我的文本列没有被查询选中。

【讨论】:

    【解决方案2】:

    尝试:

    =ARRAYFORMULA(QUERY(TO_TEXT('Salesforce Data'!A2:C), 
     "select Col1,Col3 
      where Col3 >= date '"&TEXT(A1, "yyyy-mm-dd")&"' 
        and Col3 <  date '"&TEXT(B1, "yyyy-mm-dd")&"'", 0))
    

    【讨论】:

      【解决方案3】:

      非常感谢,非常感谢。这个线程对我帮助很大。 我已经从这个线程中使用了这些。将来有人可能需要:

      "select A, B, C, G, H, J where I='"&TEXT($A$2, "dd-mmm-yyyy")&"'"
      
      "select B, C WHERE F= date '"&TEXT(DATEVALUE($A$2),"yyyy-mm-dd")&"'"
      
      "select A, B, C, G, H, J where I='"&TEXT($A$2, "dd-mmm-yyyy")&"' or I='"&TEXT($A$2, "d-mmm-yyyy")&"'"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-10
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        相关资源
        最近更新 更多