我有一个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天过滤?
任何帮助表示感谢。
答案 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()