gpt4 book ai didi

Azure CosmosDB 未在Where 子句中返回带有UDF 的结果

转载 作者:行者123 更新时间:2023-12-03 02:31:38 26 4
gpt4 key购买 nike

我在 Azure CosmosDB 中创建了一个 UDF,以便可以查询 Timestamp 字段等于特定年份的记录。

例如,我的查询如下所示:

SELECT * FROM c WHERE c.StaticKey = 'd6c5a92203d84ce28b94cfc64a6ad4ce' 
AND udf.YEAR(c.Timestamp) = '2020' OFFSET 0 LIMIT 1

但由于某种原因我的查询总是返回 0 个结果。我的表中有很多记录的日期时间是今年的。

exmaple 的此记录返回 1 行并打印 2020:

SELECT udf.YEAR(c.Timestamp) FROM c WHERE c.StaticKey = 'd6c5a92203d84ce28b94cfc64a6ad4ce' OFFSET 0 LIMIT 1

我在 Azure 中的 UDF 如下所示:

function YEAR(datetimeString){
var datetime = new Date(Date.parse(datetimeString));
return datetime.getFullYear();
}

Timestamp 列包含如下所示的日期时间值:2020-10-20T07:13:22.802346

正如您在这个 fiddle 中看到的,javascript 函数运行良好:https://jsfiddle.net/0eozyhnv/

有人知道为什么我的 UDF 在我的 WHERE 子句中不起作用吗?

最佳答案

您的 UDF 返回一个整数。所以你应该像这样编写查询:

SELECT * FROM c WHERE c.StaticKey = 'd6c5a92203d84ce28b94cfc64a6ad4ce' 
AND udf.YEAR(c.Timestamp) = 2020 OFFSET 0 LIMIT 1

但请注意,由于 UDF 无法使用索引,因此速度相对较慢。如果您可以按照 Cosmos DB 接受的格式 (YYYY-MM-DDThh:mm:ss.fffffffZ) 格式化日期,您还可以使用内置函数 DATETIMEPART('yyyy' ,c.Timestamp)=2020

但是,我怀疑最快的解决方案是 STARTSWITH(c.Timestamp, '2020'),因为这利用了 Timestamp 上的范围索引。

关于Azure CosmosDB 未在Where 子句中返回带有UDF 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64899254/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com