如何在Azure DocumentDb上进行不区分大小写的搜索?

时间:2015-05-28 17:01:05

标签: azure-cosmosdb

是否可以在DocumnetDb上执行不区分大小写的搜索?

假设我有一个'name'键和值为“Timbaktu”的记录

这将有效:

select * from json j where j.name  = "Timbaktu"

这不会:

select * from json j where j.name  = "timbaktu"

那你怎么做一个不区分大小写的搜索呢?

提前致谢。

问候。

3 个答案:

答案 0 :(得分:18)

有两种方法可以做到这一点。 1.使用内置的LOWER / UPPER功能,例如,

select * from json j where LOWER(j.name) = 'timbaktu'

这需要扫描。另一种更有效的方法是存储“规范化”形式,例如小写并用于查询。例如,JSON将是

{ name: "Timbaktu", nameLowerCase: "timbaktu" }

然后用它来查询:

select * from json j WHERE j.nameLowerCase = "timbaktu"

希望这有帮助。

答案 1 :(得分:1)

Cosmos最近为字符串函数添加了不区分大小写的选项:

您现在可以选择进行这些字符串比较 不区分大小写:包含,EndsWith,StringEquals和StartsWith。 并且这些方面已经实现了显着的性能改进 字符串系统函数。这四个字符串系统函数中的每个函数 现在受益于索引,因此延迟将大大降低 和请求单位(RU)消耗。

Announcement

答案 2 :(得分:0)

也许这是一个古老的案例,我只想提供一种解决方法。

您可以在天蓝色的宇宙数据库中使用UDF

udf:

function userDefinedFunction(str){
    return str .toLowerCase();
}

并使用以下sql查询结果:

SELECT c.firstName FROM c where udf.lowerConvert(c.firstName) = udf.lowerConvert('John')

enter image description here