如何使用GSheets Query dateDiff函数忽略文本


=QUERY(IMPORTRANGE(some_range);"
SELECT Col2,dateDiff(Col20,now())
WHERE Col20 IS NOT NULL AND dateDiff(Col20,now()) <= 30
ORDER BY Col2 ASC
LABEL Col2 'SANITARNA'
";0)

因此,我有这个查询公式,它非常适用于只有日期的列。然而,我需要将其应用于有日期和一些文本值的列。问题是,当我更改dateDiff列时,我会得到一个错误"Unable to parse query string for Function QUERY parameter 2: Can't perform the function 'dateDiff' on values that are not a Date or a DateTime values",这是有道理的。然而,我似乎不知道如何在dateDiff函数中包含一个过滤器,以跳过文本值,只输出有日期的值。到目前为止,我的最佳猜测是,过滤器必须应用于SELECT中的dateDiff函数,而不是WHERE。我试过一个filter/inumber公式,但解析错误,我的大脑被炸了,看不出问题。

测试表:https://docs.google.com/spreadsheets/d/1thpXBSp-Vt1E5MGaM89Xko6GvekjmzyidO94Sil2AjQ/edit?usp=sharing

请参阅我新添加的表格("Erik Help"(,其中包含以下版本的原始公式:

=QUERY(FILTER(A:C,ISNUMBER(C:C))," SELECT Col1,dateDiff(Col3,now()) WHERE Col2 IS NOT NULL AND dateDiff(Col3,now()) <= 30 ORDER BY Col1 ASC LABEL Col1 'PRIJAVA DO' ",0)

FILTER将首先过滤中的,仅过滤C列中的值为数字的行。由于所有日期都是数字,就谷歌表单而言,这将只是你在C栏中的日期行

注意:您当前在C列中没有小于或等于TODAY((30天的日期值,也就是说,您的所有C列日期都在未来,因此您的表返回为空(但没有错误,因为它正在工作(。因为QUERY作用于原始数据的FILTER,而不是原始数据本身,所以所有QUERY列引用都必须采用Colx表示法,而不是a-B-C表示法。

Erik Tyler提供的解决方案有效,我只是在这里添加importrange的语法,以及任何有类似问题的人。

=QUERY(FILTER(
IMPORTRANGE("some_range";"some_sheets!A:QQ");
ISNUMBER(
IMPORTRANGE("some_range";"some_sheets!C:C")));"
SELECT Col2,dateDiff(Col20,now())
WHERE Col20 IS NOT NULL AND dateDiff(Col20,now()) <= 30
ORDER BY Col2 ASC
LABEL Col2 'SANITARNA'
";0)

最新更新