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

求助:将MySQL的LIKE CONCAT语句转换为等价Kusto KQL语句

解决MySQL转KQL的动态匹配问题

你碰到的核心问题是KQL的matches regex运算符只支持常量正则表达式,没法直接用列作为匹配规则。而你的需求是基于name列动态生成匹配逻辑来校验capital列,这时候就得用KQL的regex_match()函数——它支持把列作为正则表达式参数。

正确的KQL转换写法

对应你原MySQL查询SELECT name FROM world WHERE capital LIKE CONCAT(name, '%city'),可以这样写:

world
| where regex_match(capital, strcat("^", name, ".*city$"))
| project name

逻辑对应说明

原MySQL的LIKE CONCAT(name, '%city')是要求:capital必须以name开头,中间可以是任意长度的任意字符(包括空),最后以city结尾。
strcat("^", name, ".*city$")会为每一行动态生成正则规则:^标记字符串开头,.*匹配任意长度任意字符,$标记字符串结尾,完美对应原LIKE的匹配逻辑。

可选:开启不区分大小写匹配

如果你的MySQL查询是不区分大小写的(比如默认的LIKE行为),可以给regex_match()加第三个参数"i"来启用大小写不敏感模式:

world
| where regex_match(capital, strcat("^", name, ".*city$"), "i")
| project name

为什么之前的写法失效?

  • matches regex运算符要求右侧必须是固定的常量字符串,不能是列或者动态生成的表达式,所以你尝试的where capital matches regex strcat(name,".*city"),以及用extend生成列后匹配的写法都不生效。
  • regex_match()是函数类型的匹配方式,支持将列作为正则参数,刚好满足这种动态匹配的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:13:10