Cosmos DB,C#SQL Api - 不区分大小写的WHERE子句

时间:2018-01-30 17:31:51

标签: azure-cosmosdb

我正在使用C#SQL Api(DocumentDB)处理Azure Cosmos DB的项目,并且需要知道是否可以使用不区分大小写的WHERE子句。从我在网上找到的内容来看似乎还不可能。

我想写一个像:

这样的查询
SELECT l.CustomerName, l.LogDetail
FROM Logs l
WHERE l.CustomerName = 'Acme'

并返回客户名称等于“ACME”,“Acme”或甚至“aCmE”的文档。我不想在扫描中受到性能影响。我更喜欢让查询使用索引。

我知道我可以创建第二个CustomerName字段,其中包含要过滤的所有小写值,但我希望看看是否可以避免这种情况。这可能吗?

3 个答案:

答案 0 :(得分:1)

不幸的是,除非在过去两个月内添加,这是不可能的

如果在索引字段上使用ToLower()或ToUpper(),则会导致扫描,因此这不是一个选项。

一些有效的解决方案就像你说的那样,用一个不区分大小写的字符串添加另一个字段,或者只插入具有特定情况的数据。听起来你的数据库不区分大小写,所以为什么不确保这些情况真的不敏感呢?

答案 1 :(得分:1)

在撰写本文时,现在有一个LOWER函数可用于Cosmos SQL API查询。这将使您能够像这样编写查询:

SELECT l.CustomerName, l.LogDetail
FROM Logs l
WHERE LOWER(l.CustomerName) = 'acme'

Here are the docs用于LOWER功能。

答案 2 :(得分:0)

现在有一个StringEquals函数,可用于进行不区分大小写的比较。

SELECT STRINGEQUALS("abc", "abc", false) AS c1, STRINGEQUALS("abc", "ABC", false) AS c2,  STRINGEQUALS("abc", "ABC", true) AS c3

返回

[{
    "c1": true,
    "c2": false,
    "c3": true
}]

以下是文档-https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-stringequals