首页 > 解决方案 > Google 表格日期查询不适用于特定列

问题描述

我有从 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-sheetsgoogle-sheets-formulaarray-formulasgoogle-sheets-querygoogle-query-language

解决方案


经过大量的试验和错误,我发现了问题:谷歌表格似乎根据大多数单元格对数据列进行分类。因此,即使 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然后我的文本列没有被查询选中。


推荐阅读