在cosmos db中将字符串转换为日期时间

问题描述

在我的cosmos db中,日期字段像这样存储为字符串 { “ ValidationWeekStartDay”:“ 2020年4月27日” }

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

从c.ValidationWeekStartDay> GetCurrentDateTime()中选择*

这不能给我正确的结果。

解决方法

这是日期格式的问题,您存储的文档格式为“ dd-MMM-yyyy”,而GetCurrentDateTime()函数获取的日期格式为“ yyyy-mm-dd ....”。因此,当您运行上述查询时,将发生如下所示的比较:

'27-Apr-2020' > '2020-08-17'

将字符一一比较,第一个值的前两个字符大于第二个值。出于测试目的,无论哪个月份,查询都将返回日期20以上的任何内容。

有两种解决方法。

  1. 以与GetCurrentDateTime()函数相同的格式存储日期。

  2. 创建如下所示的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; }

然后使用以下查询:

select c.stdDates as stdDates from c Where udf.formatdatetime(c.stdDates) > GetCurrentDateTime ()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...