CosmosDB,SQL查询,带有unixtimestamp的过滤器时间戳字段

时间:2018-04-11 12:40:55

标签: azure-cosmosdb

我有一个cosmosdb,我正在查询SQL,我希望在其中过滤UnixTimestamp格式的Timestamp字段。这是我到目前为止的查询:

SELECT 
root._id as hpid
,root.FirstConnected["$date"] as FirstConnected
,root.LastUpdated["$date"] as LastUpdated
,var._id as varid
,var.Values[0].Timestamp["$date"] as TimeStamp
,var.Values[0]["Value"] as Val
FROM root 
JOIN var IN root.Variables
WHERE 
var._id IN (99998,99999) AND 
var.Values[0].Timestamp["$date"] >= 1523270312001

结果如下:

[
{
    "hpid": 21032,
    "FirstConnected": 1522835868346,
    "LastUpdated": 1523360279908,
    "varid": 99998,
    "TimeStamp": 1523270312001,
    "Val": 8888
}
]

目前是一种能够动态过滤UnixTimeStamp中的TimeStamp值的好方法吗?可以说我想从今天开始过去5天过滤?

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:0)

是的,上述方式应该有效

var fiveDaysAgo = new Date();
fiveDaysAgo.setDate(d.getDate() - 5);
var threshold = twoDaysAgo.getTime() / 1000;

SELECT 
root._id as hpid
,root.FirstConnected["$date"] as FirstConnected
,root.LastUpdated["$date"] as LastUpdated
,var._id as varid
,var.Values[0].Timestamp["$date"] as TimeStamp
,var.Values[0]["Value"] as Val
FROM root 
JOIN var IN root.Variables
WHERE 
var._id IN (99998,99999) AND 
var.Values[0].Timestamp["$date"] >= @threshold

答案 1 :(得分:0)

要动态计算时间戳,您可以在Cosmos DB中创建用户定义的函数(udf),并在查询中调用它。

例如,您可以按如下方式定义udf:

function getDateTarget(){
    var date = new Date();
    date.setDate(date.getDate() - 5)
    return Math.floor(date.getTime() / 1000);
}

并在您的查询中使用它:SELECT * FROM c WHERE c._ts > udf.getDateTarget()