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

MariaDB如何从{"user":"xxx"}格式字符串中提取数字匹配userid

解决方案

方法1:使用JSON内置函数(推荐,MySQL 5.7及以上版本支持)

你存储在code字段的内容是标准JSON格式,直接用JSON解析函数提取对应字段值是最稳妥的方案,不会出现匹配偏差。
查询语句如下:

SELECT sub.userid, rev.code
FROM test1 sub
JOIN test2 rev ON sub.userid = JSON_UNQUOTE(JSON_EXTRACT(rev.code, '$.user'));

如果你使用的是MySQL 8.0及以上版本,可以用更简洁的JSON_VALUE函数简化写法:

SELECT sub.userid, rev.code
FROM test1 sub
JOIN test2 rev ON sub.userid = JSON_VALUE(rev.code, '$.user');

执行上述语句可以正确匹配到userid为3的记录,符合预期结果。

方法2:正则提取(兼容低版本MySQL)

如果你的MySQL版本低于5.7,不支持JSON相关函数,可以用正则替换的方式提取数字部分:

SELECT sub.userid, rev.code
FROM test1 sub
JOIN test2 rev ON sub.userid = REGEXP_REPLACE(rev.code, '[^0-9]', '');

REGEXP_REPLACE(rev.code, '[^0-9]', '')的作用是将code字段中所有非数字的字符全部替换为空,最终得到的就是你需要的纯数字字符串,再和test1的userid做等值匹配即可。

原写法失效原因说明

你之前的写法仅用REGEXP '[0-9]'做判断,只会返回代表是否存在数字的布尔值(1/0),并没有将数字从完整的JSON字符串中提取出来,关联条件是拿数字类型的userid和完整的JSON字符串做等值匹配,自然无法得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:54:04