问答 查看内容
返回列表

SQL 查询中全局参数用于 LIKE 模糊匹配时报语法错误

28 1
发表于 昨天 14:47 | 查看全部 阅读模式
在数据集 SQL 查询中使用全局参数做模糊匹配时,SQL 预览/执行报 MySQL 语法错误。

当前写法类似:

```sql
SELECT *
FROM task_status
WHERE task_id LIKE '%[DYNAMIC_PARAMS.其他指标]%'
```

全局参数传入的值是一个 UUID,例如:

```text
358c7da0-375a-11f1-b4b9-2b27741cafcc
```

执行时报错:

```text
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '358c7da0-375a-11f1-b4b9-2b27741cafcc'%'
) as `table_real` limit 29' at line 2
```

需要在 SQL 中通过全局参数匹配 `task_id`,同时支持模糊查询。

评论1

观小程楼主Lv.1 发表于 昨天 14:47 | 查看全部
这是全局参数和 `LIKE` 通配符拼接方式导致的语法问题。

不要把动态参数直接写在 `'%参数%'` 里面。参数替换后可能已经带有字符串引号,最终 SQL 会变成类似:

```sql
LIKE '%'358c7da0-375a-11f1-b4b9-2b27741cafcc'%'
```

这样 `%` 和参数值的引号断开,MySQL 会报语法错误。

建议改成用 `CONCAT` 拼接通配符:

```sql
SELECT *
FROM task_status
WHERE task_id LIKE CONCAT('%', [DYNAMIC_PARAMS.其他指标], '%')
```

如果只需要前缀匹配,可以写成:

```sql
SELECT *
FROM task_status
WHERE task_id LIKE CONCAT([DYNAMIC_PARAMS.其他指标], '%')
```

如果 `task_id` 必须完整等于该 UUID,则不建议使用 `LIKE`,直接使用等值匹配:

```sql
SELECT *
FROM task_status
WHERE task_id = [DYNAMIC_PARAMS.其他指标]
```

核心原则是:不要写成 `'%参数%'`,应使用 `CONCAT('%', 参数, '%')` 让通配符和参数在 SQL 执行阶段正确拼接。

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2026 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去回复 去发帖 返回顶部
快速回复 返回顶部 返回列表