Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure文档数据库存储过程日期时间查询_C#_Azure_Azure Cosmosdb - Fatal编程技术网

C# Azure文档数据库存储过程日期时间查询

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")

我使用文档数据库存储过程将基于时间的遥测数据检索到我的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") + "' 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() + "')"