C# Azure文档数据库存储过程日期时间查询
我使用文档数据库存储过程将基于时间的遥测数据检索到我的C#web应用程序中。我收集了1000份文件。我想根据日期时间对象进行计算。我想根据时间间隔获取所有文档。使用SQL查询,我得到最近24小时记录的结果C# Azure文档数据库存储过程日期时间查询,c#,azure,azure-cosmosdb,C#,Azure,Azure Cosmosdb,我使用文档数据库存储过程将基于时间的遥测数据检索到我的C#web应用程序中。我收集了1000份文件。我想根据日期时间对象进行计算。我想根据时间间隔获取所有文档。使用SQL查询,我得到最近24小时记录的结果 SqlQuerySpec query = new SqlQuerySpec("SELECT * FROM c where (c.logdatetime between '" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:ssZ")
SqlQuerySpec query = new SqlQuerySpec("SELECT * FROM c where (c.logdatetime between '" + DateTime.Now.AddDays(-1).ToString("yyyy-MM-ddTHH:mm:ssZ") + "' and '" + DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ") + "')");
我想使用存储过程编写相同的查询。如何在存储过程中执行此操作。提前感谢。首先:我建议您不要对格式化的日期时间字符串执行查询。将值存储为“ticks”(从历元开始的秒或毫秒,也称为Unix时间)。 当前时间(以滴答为单位):
// C#
DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
// JavaScript
new Date().value
如果你想回到24小时,只需从时间中减去相等的刻度<代码>24*60*60*1000
其次:至少要摆脱时区。在只有一个时区的情况下,您的实现似乎非常可靠。曾经您的写入客户端和CosmosDB服务器需要在同一时区运行,这是有保证的。请使用DateTime.UtcNow而不是DateTime.Now。或DateTimeOffset。
(如果您在将数据写入CosmosDB之前未手动调用ToString,则该数据将已被设置为时区,请参阅)
这是一个示例存储过程:
感觉就像是在问如何将代码翻译成JavaScript
SqlQuerySpec query = new SqlQuerySpec("SELECT * FROM c where
(c.logdatetime between '" + DateTime.Now.AddDays(-1)
.ToString("yyyy-MM-ddTHH:mm:ssZ") + "' and '" + DateTime.Now
.ToString("yyyy-MM-ddTHH:mm:ssZ") + "')");
使用滴答声会是这样的:
var now = new Date().value;
var yesterday = now - 24 * 60 * 60 * 1000;
var query = "SELECT * FROM c where (c.logdatetime between '" + yesterday + "' and '" + now + "')"
如果需要保留字符串:
var now = new Date();
var yesterday = new Date(now.value - 24 * 60 * 60 * 1000);
var query = "SELECT * FROM c where (c.logdatetime between '" + yesterday.toISOString() + "' and '" + now.toISOString() + "')"
当夏令时开始使用时,不确定它的表现有多完美,但如果这对你来说很关键的话,你应该找到足够的资源
var now = new Date().value;
var yesterday = now - 24 * 60 * 60 * 1000;
var query = "SELECT * FROM c where (c.logdatetime between '" + yesterday + "' and '" + now + "')"
var now = new Date();
var yesterday = new Date(now.value - 24 * 60 * 60 * 1000);
var query = "SELECT * FROM c where (c.logdatetime between '" + yesterday.toISOString() + "' and '" + now.toISOString() + "')"