我的文档包含这样的属性
{
"id":"1bd13f8f-b56a-48cb-9b49-7fc4d88beeac",
"name":"Sam",
"createdOnDateTime": "2018-07-23T12:47:42.6407069Z"
}
我想基于存储为字符串的createdOnDateTime
查询文档。
查询,例如-
SELECT * FROM c where c.createdOnDateTime>='2018-07-23' AND c.createdOnDateTime<='2018-07-23'
这将返回当天创建的所有文档。
我正在从日期选择器中提供日期值,该日期选择器只提供没有时间的日期,因此在比较日期时给我带来了问题。
是否有任何方法可以节省createdOnDateTime
属性中的时间,或者还有其他方法可以实现此目的?
答案 0 :(得分:1)
CosmosDB客户端将时间戳存储在ISO8601 format中,这样做的一个很好的理由是它的lexicographical order与时间流匹配。含义-您可以对这些字符串进行排序和比较,并按照它们表示的时间对其进行排序。
因此,在这种情况下,您无需删除时间分量,只需修改传入的参数即可获得所需的结果。如果您希望从SELECT * FROM c
WHERE c.createdOnDateTime >= '2018-07-23'
AND c.createdOnDateTime < '2018-07-24'
的整个日期开始输入所有条目,则可以使用查询:
createdOnDateTime
请注意,此查询可以在{{1}}上使用RANGE索引。
答案 1 :(得分:0)
Please use User Defined Function to implement your requirement, no need to update createdOnDateTime
property.
UDF:
function con(date){
var myDate = new Date(date);
var month = myDate.getMonth()+1;
if(month<10){
month = "0"+month;
}
return myDate.getFullYear()+"-"+month+"-"+myDate.getDate();
}
SQL:
SELECT c.id,c.createdOnDateTime FROM c where udf.con(c.createdOnDateTime)>='2018-07-23' AND udf.con(c.createdOnDateTime)<='2018-07-23'
Output :
Hope it helps you.