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

如何在MySQL中获取JSON列元素的最后三个字符?

解决JSON字段中提取Logo后缀判断SVG格式的问题

问题根源

  1. JSON_EXTRACT返回的JSON字符串默认带双引号(例如"example.svg"),直接用RIGHT取3个字符会得到vg",是因为包含了末尾的引号。
  2. MySQL中没有LEN函数,需用CHAR_LENGTH(按字符计数,适合多字节字符)或LENGTH(按字节计数,单字节场景可用)替代。

正确实现方法

方法1:先去除JSON字符串的引号,再提取后缀

使用JSON_UNQUOTE去掉JSON_EXTRACT结果的引号,再用RIGHT或SUBSTRING提取最后3个字符:

-- RIGHT写法
SELECT RIGHT(JSON_UNQUOTE(JSON_EXTRACT(settings, '$.Logo')), 3) AS logo_suffix
FROM user;

-- SUBSTRING写法
SELECT SUBSTRING(
    JSON_UNQUOTE(JSON_EXTRACT(settings, '$.Logo')),
    CHAR_LENGTH(JSON_UNQUOTE(JSON_EXTRACT(settings, '$.Logo'))) - 2
) AS logo_suffix
FROM user;

方法2:用简化运算符->>替代嵌套函数

MySQL 5.7及以上版本支持->>运算符,等价于JSON_UNQUOTE(JSON_EXTRACT()),写法更简洁:

-- RIGHT写法(推荐)
SELECT RIGHT(settings->>'$.Logo', 3) AS logo_suffix
FROM user;

-- SUBSTRING写法
SELECT SUBSTRING(
    settings->>'$.Logo',
    CHAR_LENGTH(settings->>'$.Logo') - 2
) AS logo_suffix
FROM user;

直接判断是否为SVG格式

可以直接在查询中添加条件筛选:

-- 查询所有Logo后缀不是svg的记录
SELECT *
FROM user
WHERE RIGHT(settings->>'$.Logo', 3) != 'svg';

-- 用LIKE匹配后缀的写法(更直观)
SELECT *
FROM user
WHERE settings->>'$.Logo' NOT LIKE '%.svg';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:45:19