如何使用 GSheets Query dateDiff 函数忽略文本?
How to ignore text with GSheets Query dateDiff function?
=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/isnumber 公式,但出现解析错误,我的大脑被炸了,看不出问题所在。
测试sheet:https://docs.google.com/spreadsheets/d/1thpXBSp-Vt1E5MGaM89Xko6GvekjmzyidO94Sil2AjQ/edit?usp=sharing
查看我新添加的 sheet(“Erik 帮助”),其中包含以下版本的原始公式:
=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
将首先过滤 in 只有那些 Col C 中的值为数字的行。由于就 Google 工作表而言,所有日期都是数字,因此只有 Col C.
中带有日期的行
注意: 您当前在 Col C 中没有距离 TODAY() 小于或等于 30 天的日期值——也就是说,您所有的 Col-C 日期在未来——所以你的 table 返回空值(但没有错误,因为它正在工作)。因为 QUERY 作用于原始数据的 FILTER 而不是原始数据本身,所以所有 QUERY 列引用必须采用 Colx 表示法,而不是 A-B-C 表示法。
Erik Tyler 提供的解决方案有效,我只是在这里添加导入范围的语法以及任何有类似问题的人。
=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)
=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/isnumber 公式,但出现解析错误,我的大脑被炸了,看不出问题所在。
测试sheet:https://docs.google.com/spreadsheets/d/1thpXBSp-Vt1E5MGaM89Xko6GvekjmzyidO94Sil2AjQ/edit?usp=sharing
查看我新添加的 sheet(“Erik 帮助”),其中包含以下版本的原始公式:
=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
将首先过滤 in 只有那些 Col C 中的值为数字的行。由于就 Google 工作表而言,所有日期都是数字,因此只有 Col C.
注意: 您当前在 Col C 中没有距离 TODAY() 小于或等于 30 天的日期值——也就是说,您所有的 Col-C 日期在未来——所以你的 table 返回空值(但没有错误,因为它正在工作)。因为 QUERY 作用于原始数据的 FILTER 而不是原始数据本身,所以所有 QUERY 列引用必须采用 Colx 表示法,而不是 A-B-C 表示法。
Erik Tyler 提供的解决方案有效,我只是在这里添加导入范围的语法以及任何有类似问题的人。
=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)