【问题标题】:Azure Cosmos DB: Incorrect syntax near 'Dec' error while executing query through stored procedureAzure Cosmos DB:通过存储过程执行查询时出现“Dec”错误附近的语法错误
【发布时间】:2017-12-07 02:13:12
【问题描述】:

在针对 Azure Cosmos DB 非分区集合运行的存储过程中,我在选择查询下方运行:

var twentyMinutesBefore = new Date();
twentyMinutesBefore.setMinutes(twentyMinutesBefore.getMinutes() - 20);
var filterQuery = "SELECT TOP 40 * FROM c WHERE (c.transmissionState = 2 AND (" + twentyMinutesBefore + " > c.dateCreated.epoch)) OR c.transmissionState = 0 ORDER BY c.dateCreated.epoch DESC";

我执行如下查询:

var isAccepted = collection.queryDocuments(collectionLink, filterQuery, options, callback);

function callback(err, queryFeed, responseOptions) {
    if (err) {
        throw err; // <-- Error thrown from this line as per stack trace
    }
    // Iterate through query feed
}

我收到以下错误:

    "Message": "Microsoft.Azure.Documents.DocumentClientException: Message: 
{\"Errors\":[\"Encountered exception while executing function. Exception = Error:
{\\"errors\\":[{\\"severity\\":\\"Error\\",\\"location\\":{\\"start\\":63,\\"end\\":66},\\"code\\":\\"SC1001\\",
\\"message\\":\\"Syntax error, incorrect syntax near 'Dec'.\\"}]}   
    Stack trace: Error: {\\"errors\\":[{\\"severity\\":\\"Error\\",\\"location\\":{\\"start\\":63,\\"end\\":66},\\"code\\":\\"SC1001\\",\\"message\\":\\"Syntax error, incorrect syntax near 'Dec'.\\"}]}

在控制台应用程序中,我尝试解析过滤器查询以验证其格式是否正确。结果如下:

SELECT TOP 40 * FROM c WHERE (c.transmissionState = 2 AND (1512593297244 > c.dateCreated.epoch)) OR c.transmissionState = 0 ORDER BY c.dateCreated.epoch DESC

当我按原样复制此查询并在 Cosmos DB 查询窗口中运行时,它运行良好并按预期返回结果。

不确定为什么它不通过存储过程运行。知道错误中的“Dec”是什么意思吗?我在我的存储过程中没有找到任何这样的字符串。

【问题讨论】:

    标签: azure-cosmosdb


    【解决方案1】:

    使用twentyMinutesBefore.getTime(),不使用getTime()来获取UNIX纪元时间,你会得到像“Thu Dec 07 2017 13:26:39 GMT+1100 (AUS Eastern Daylight Time)”这样的完整日期:

    var filterQuery = "SELECT TOP 40 * FROM c WHERE (c.transmissionState = 2 AND (" + twentyMinutesBefore.getTime() + " > c.dateCreated.epoch)) OR c.transmissionState = 0 ORDER BY c.dateCreated.epoch DESC";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 2020-07-05
      相关资源
      最近更新 更多