检查 CosmosDB 查询中的参数是否为空
Check if parameter is null in CosmosDB query
如何在查询数据库时检查@azure/cosmos sdk中的参数是否为空?
我试过 IS_NULL 或 IS_EMPTY,要么中断查询:
await container.items
.query({
query: `
SELECT * from company
WHERE company.location = @location
AND (@dateFrom IS NULL OR company.createdAt >= @dateFrom)
AND (@dateTo IS NULL OR company.createdAt < @dateTo)
ORDER BY company.createdAt DESC
`,
parameters: [
{ name: "@location", value: "Germany" },
{ name: "@dateFrom", value: new Date().setFullYear(new Date().getFullYear() - 5)},
{ name: "@dateTo", value: new Date() },
]
})
.fetchAll();
我收到这个错误:
Message: {\"errors\":[{\"severity\":\"Error\",\"location\":{\"start\":243,\"end\":245},\"code\":\"SC1001\",\"message\":\"Syntax error, incorrect syntax near 'IS'.\"}]}
我在 IS_DEFINED 表达式的帮助下弄明白了:
AND (IS_DEFINED(@dateFrom) = false OR company.createdAt >= @dateFrom)
AND (IS_DEFINED(@dateTo) = false OR company.createdAt < @dateTo)
我发现 IS_DEFINED 函数并不是我们所需要的,因为 属性 通常被定义,但包含一个空值。
相反,我发现 IS_NULL 函数可以工作:
AND (IS_NULL(@dateFrom) = true OR company.createdAt >= @dateFrom)
AND (IS_NULL(@dateTo) = true OR company.createdAt < @dateTo)
如何在查询数据库时检查@azure/cosmos sdk中的参数是否为空?
我试过 IS_NULL 或 IS_EMPTY,要么中断查询:
await container.items
.query({
query: `
SELECT * from company
WHERE company.location = @location
AND (@dateFrom IS NULL OR company.createdAt >= @dateFrom)
AND (@dateTo IS NULL OR company.createdAt < @dateTo)
ORDER BY company.createdAt DESC
`,
parameters: [
{ name: "@location", value: "Germany" },
{ name: "@dateFrom", value: new Date().setFullYear(new Date().getFullYear() - 5)},
{ name: "@dateTo", value: new Date() },
]
})
.fetchAll();
我收到这个错误:
Message: {\"errors\":[{\"severity\":\"Error\",\"location\":{\"start\":243,\"end\":245},\"code\":\"SC1001\",\"message\":\"Syntax error, incorrect syntax near 'IS'.\"}]}
我在 IS_DEFINED 表达式的帮助下弄明白了:
AND (IS_DEFINED(@dateFrom) = false OR company.createdAt >= @dateFrom)
AND (IS_DEFINED(@dateTo) = false OR company.createdAt < @dateTo)
我发现 IS_DEFINED 函数并不是我们所需要的,因为 属性 通常被定义,但包含一个空值。
相反,我发现 IS_NULL 函数可以工作:
AND (IS_NULL(@dateFrom) = true OR company.createdAt >= @dateFrom)
AND (IS_NULL(@dateTo) = true OR company.createdAt < @dateTo)