在Cosmos DB中将字符串转换为日期时间

3

在我的cosmos db中,日期字段以以下字符串形式存储:

{ "ValidationWeekStartDay": "27-Apr-2020" }

我必须编写一个查询来提取所有ValidationWeekStartDay大于当前日期的文档。如何在cosmos db查询中实现这个目标?

Select * from c where c.ValidationWeekStartDay > GetCurrentDateTime()

但是,这并不能给我正确的结果。


你得到的结果不一致是什么?我尝试使用相同的查询,它对我起作用了。你能否也发布几个文档,这样更容易理解实际问题呢? - AnuragSharma-MSFT
我有以下文档: [ { "stdDates": "13-Apr-2020" }, { "stdDates": "20-Apr-2020" }, { "stdDates": "27-Apr-2020" }, { "stdDates": "20-Jul-2020" }, { "stdDates": "27-Jul-2020" }, { "stdDates": "03-Aug-2020" }, { "stdDates": "10-Aug-2020" }, { "stdDates": "17-Aug-2020" }, { "stdDates": "10-Aug-2020" } ] - Preeti
[ { "stdDates": "27-Apr-2020" }, { "stdDates": "20-Jul-2020" }, { "stdDates": "27-Jul-2020" }, { "stdDates": "03-Aug-2020" }, { "stdDates": "10-Aug-2020" }, { "stdDates": "17-Aug-2020" }, { "stdDates": "10-Aug-2020" } ]若运行查询 select c.stdDates as stdDates from c Where c.stdDates > GetCurrentDateTime (),则会得到错误的结果[ { "stdDates": "27-Apr-2020" }, { "stdDates": "27-Jul-2020" } ] - Preeti
我已经使用您提供的数据成功重现了问题,并在答案中提供了解决方法。请告诉我这是否对您有用。 - AnuragSharma-MSFT
1个回答

1
这是日期格式的问题,您存储的文档格式为“dd-MMM-yyyy”,而GetCurrentDateTime()函数以“yyyy-mm-dd”格式获取日期。因此,当您运行上述查询时,会发生以下比较:
'27-Apr-2020' > '2020-08-17'

它逐个比较字符,第一个值的前两个字符变得大于第二个值。为了测试目的,无论哪个月份,在日期20之上的任何内容都将由您的查询返回。
有两种解决方法。
1.以与GetCurrentDateTime()函数相同的格式存储日期。 2.创建像下面这样的UDF。您可以创建自己的UDF,这只是基于日期格式的示例UDF。(请原谅格式,您可以复制并按原样运行它)
function formatdatetime(datetime){ datetime = datetime.substring(7,11) + '-' + datetime.substring(3,6) + '-' + datetime.substring(0,2); datetime = datetime.replace('Jan','01'); datetime = datetime.replace('Feb','02'); datetime = datetime.replace('Mar','03'); datetime = datetime.replace('Apr','04'); datetime = datetime.replace('May','05'); datetime = datetime.replace('Jun','06'); datetime = datetime.replace('Jul','07'); datetime = datetime.replace('Aug','08'); datetime = datetime.replace('Sep','09'); datetime = datetime.replace('Oct','10'); datetime = datetime.replace('Nov','11'); datetime = datetime.replace('Dec','12'); return datetime; }
然后使用以下查询:

从c中选择stdDates,其中udf.formatdatetime(c.stdDates) > GetCurrentDateTime()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接