CosmosDB 计算属性以从位日期获取年龄

问题描述 投票:0回答:1

我正在寻找一种方法,根据 CosmosDB 中的出生日期来获取一个人的年龄。 我在文档中读到,他们最近在此表单上在容器级别实现了“计算属性”:

{
  "computedProperties": [
    {
        "name": "cp_Age",
        "query": "SELECT VALUE DateTimeDiff('YYYY', c.DateOfBirth, GetCurrentDateTime()) FROM c"
    }
  ]
}

在我的例子中,DateOfBirth 属性是 DateOnly,因此 CosmosDB 将其值存储为“2002-12-23”。

上面的代码计算两个日期之间的年份差,但并不总是给出正确的年龄值,因为生日那天可能没有出现在当年。

也许使用 UDF 可以更好地实现这一点...

到目前为止,有人已经实现了类似的东西吗?

提前致谢

azure azure-cosmosdb azure-cosmosdb-sqlapi
1个回答
0
投票

事实证明,CosmosDB 函数接受 DateOnly 作为参数以及 ISO 8601 格式的日期,因此,基于与同一问题相关的旧 SQL 答案(使用 SQL 计算年龄)我已经成功获得了所需的结果使用可用的 CosmosDB 函数的结果:

    {
        "name": "cp_Age",
        "query": "SELECT VALUE DateTimeDiff('YYYY', u.DateOfBirth, GetCurrentDateTime()) - IIF((DateTimePart('mm', u.DateOfBirth) > DateTimePart('mm', GetCurrentDateTime())) OR ((DateTimePart('mm', u.DateOfBirth) = DateTimePart('mm', GetCurrentDateTime())) AND ((DateTimePart('dd', u.DateOfBirth) > DateTimePart('dd', GetCurrentDateTime())))),1,0) FROM u"
    }

这是一个相当长的表达式,但效果很好。如果您发现有更高效的方法,请显示您的答案...

© www.soinside.com 2019 - 2024. All rights reserved.