You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure CosmosDB中实现类似MySQL的LIKE查询功能?

嘿,针对你的Azure Cosmos DB字符串匹配需求,我来给你梳理清楚可行的方案:

首先直接给你答案:Azure Cosmos DB的SQL API是支持LIKE运算符的,你可以直接用类似MySQL的语法实现你的需求;另外针对你要的「以09开头且以001结尾」的精准场景,还有更高效的替代写法。

1. 直接用LIKE运算符实现你的需求

你完全可以把MySQL的查询直接适配成Cosmos DB的SQL语法,写法几乎一致:

SELECT * FROM c WHERE c.pi LIKE '09%001'

这里的%通配符和MySQL里的作用一样,代表任意长度的任意字符,刚好能匹配所有以09开头、以001结尾的pi字段值(比如你举例的09001001、09025001都会被命中)。

小提示:

  • LIKE在Cosmos DB里默认区分大小写,如果需要不区分大小写的匹配,可以结合大小写转换函数:
    SELECT * FROM c WHERE LOWER(c.pi) LIKE '09%001'
    
  • 目前主流版本的Cosmos DB SQL API都支持LIKE,如果你的账户是非常早期的版本,可能需要确认下兼容性。

2. 用STARTSWITH() + ENDSWITH()组合更高效

因为你的需求明确是「开头+结尾」的精准位置匹配,用STARTSWITH()和ENDSWITH()的组合查询,性能会比LIKE更好,尤其是当你给pi字段创建了索引的时候:

SELECT * FROM c WHERE STARTSWITH(c.pi, '09') AND ENDSWITH(c.pi, '001')

这个写法逻辑更直观,而且Cosmos DB对这两个内置函数有专门的索引优化,查询速度会更快。

为什么CONTAINS()满足不了你的需求?

你提到的CONTAINS()确实不行——它只能检查字符串中是否包含指定子串,不管子串在开头、中间还是结尾。比如CONTAINS(c.pi, '09')会命中120934这种09在中间的字符串,完全不符合你要的开头匹配要求,所以确实不适合你的场景。

内容的提问来源于stack exchange,提问作者arjan kroon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:52:00