gpt4 book ai didi

sql - 在 Azure Cosmos DB 中获取上个月的数据

转载 作者:行者123 更新时间:2023-12-04 14:16:56 24 4
gpt4 key购买 nike

嗨,我正在尝试从 azure Cosmos db 获取前 4 个月的记录。

SELECT * FROM c where c.userid = '100' and c.Date < GetCurrentDateTime()

这给出了当前日期时间的所有记录

我还有一个名为 preDate 的日期字段。现在我想获取距此 preDate 不到 4 个月的记录,例如:
 SELECT * FROM c where c.userid = '100' and c.Date > (c.preDate - 4 months)

CosmosDB 是否有类似 DATEADD() 之类的东西
像这样的查询
SELECT * FROM TABLE_NAME WHERE Date_Column >= DATEADD(MONTH, -4, GETDATE()) 

最佳答案

您可以创建一个 user defined function .我直接在资源管理器中创建了这个:

function AddMonths(dateTime, months) {
var date = new Date(dateTime);
var day = date.getUTCDate();
date.setUTCMonth(date.getUTCMonth() + months, 1);
var month = date.getUTCMonth();
date.setUTCDate(day);
if (date.getUTCMonth() !== month)
date.setUTCDate(0);
return date.toISOString();
}

UDF 由 ID 标识(不必与 JavaScript 中的函数名称匹配)。在这种情况下,我将其命名为 AddMonths .

UDF 可用于查询:
SELECT * FROM c WHERE c.userid = '100' and c.Date > udf.AddMonths(c.preDate, -4)

请注意,按月抵消日期并非易事,因为您必须考虑到月份可能有 28-31 天。我的灵感来自 aMarCruz' answer here on Stack Overflow但您可能必须考虑这是否是您处理此问题的正确方法。

如果您的日期存储为 UNIX 时间戳(例如数字),您可以直接在 Cosmos SQL 中执行算术,但决定 4 个月减去多少秒仍然需要 UDF,因此这不是更好的选择。

我注意到的一件事是,在存储 C# 时 DateTime Cosmos 中的值以 100 纳秒的精度指定。但是,在 JavaScript(使用 toISOString)中,精度为 1 微秒。在某些极端情况下,这可能会导致混淆错误,因此请注意这一点。

关于sql - 在 Azure Cosmos DB 中获取上个月的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59262190/

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