【问题标题】:How to compare ignoring case with IN keyword如何比较忽略大小写与 IN 关键字
【发布时间】:2019-04-26 19:07:27
【问题描述】:

在 Cosmos Scope / SQL 中,如何比较列国家与忽略大小写的值列表。

SELECT * FROM student WHERE student_name IN ("aLpHa", "BetA", "GamMa")

【问题讨论】:

标签: sql azure scope azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

以下查询应该在 cosmosdb 中工作

select * from json j where LOWER(j.student_name) IN ("alpha", "beta", "gamma")

您也可以拥有UDF

udf:

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

并将其用作

SELECT * FROM c where udf.lowerConvert(c.student_name) IN ("alpha", "beta", "gamma")

【讨论】:

  • 正如我在另一个问题(和 Aravind 的回答)中提到的那样,lower() 效率不高,因为它最终会扫描整个分区(或所有集合,如果你启用跨分区查询),因为它完全绕过任何索引。
  • 文档也显示它应该可以工作。这甚至不在 iScope 中运行。您正在使用哪些工具?对不起,如果它是愚蠢的。我是 Cosmos 环境的新手。
【解决方案2】:

你可以使用lower():

SELECT * FROM student WHERE lower(student_name) IN ("alpha", "beta", "gamma")

或者,用户upper()

【讨论】:

  • 你知道如何在 cosmos db 中做同样的事情吗?
  • @pcbabu我不熟悉,如果不行你也可以试试ilike比较(和like一样,只区分大小写):@987654327 @
  • 另外,根据this你可以使用lower()
  • 仅供参考 lower() 导致分区(或集合)扫描,因为它不能使用正在搜索的属性的索引。我链接为重复的问题的答案中有更多详细信息。
猜你喜欢
  • 2013-10-03
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多