我有要从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列中的第一个值手动更改为日期(这在各列之间有明显的区别),但这也没有用。
答案 0 :(得分:0)
经过反复试验,我发现了这个问题:Google表格似乎是根据大多数单元格对数据列进行分类的。因此,即使B和C列都有一些带有有效日期的单元格,而有些带有-
表示空的单元格,但B列的日期比字符串多,但是C的字符串比日期多,因此日期比较查询不会完全在C列上工作。
我目前的解决方案是添加一个公式表,将所有空值-
转换为不会干扰我的查询的日期1/1/1970:
示例公式:
=IF( OR('Salesforce Data'!C2="-",'Salesforce Data'!C2=""), date(1970,1,1), 'Salesforce Data'!C2)
另一种解决方案是编辑数据源,但是该解决方案将完全在工作表内工作。
还请注意,我将此公式拖到远低于所需的位置,以防万一,请确保如果您有text列(如A列),请用某种垃圾文本替换其中的空值。最初,我用0
代替,然后查询未选择我的文本列。
答案 1 :(得分:0)
尝试:
=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))