mysql字段截取的几种函数和搭配函数

一、substr函数

-- 函数的语法
-- substring函数与substr函数一样
SUBSTR(str,position,length);
SUBSTR(str from position for length);
  • str:需要截取的字符串,支持嵌套
  • position:截取的起始位置(索引从1开始‌,负数表示从末尾倒序计数,需MySQL 8.0+支持)
  • length:是可选参数;截取字符串的长度(若为负数则返回空值)
-- 从position开始截取至末尾
SUBSTR(str,position)
SUBSTR(str FROM position)

-- 从position开始截取length长度
SUBSTR(str,position,length)
SUBSTR(str FROM position FOR length)

二、SUBSTRING_INDEX‌

‌功能‌:按分隔符截取字符串特定部分,支持正向/逆向计数

-- 语法
SUBSTRING_INDEX(str, delim, count)

参数解析:

  • str:原始字符串或字段
  • delim:分隔符(支持多字符)
  • count:
    正数:从左往右截取前count个分隔符左侧内容
    负数:从右往左截取前abs(count)个分隔符右侧内容
-- 经典案例
SELECT SUBSTRING_INDEX('www.jb51.net', '.', 2);   -- 结果:'www.jb51'
SELECT SUBSTRING_INDEX('100-200-300', '-', -1);  -- 结果:'300'
SELECT SUBSTRING_INDEX('a|b|c', '|', 3);   -- 结果:'a|b|c'(超出分隔符总数时返回完整字符串)

三、LEFT/RIGHT‌

‌功能‌:从字符串左/右侧截取固定长度子串。

-- 语法‌:
LEFT(str, length)
RIGHT(str, length)

‌参数‌:

  • str:原始字符串
  • length:截取长度(需≥0,否则返回空值;若=0,返回空字符串)

四、LOCATE‌、instr、position

‌功能‌:返回子字符串首次出现的位置,未查询到结果返回0

-- 语法
LOCATE(substr, str , start_pos)
-- instr函数中参数区分大小写,可以结合lower/upper共同
INSTR(str, substr)
-- 可读性高
POSITION(substr IN str)

‌参数‌:

  • substr:待查找的子字符串
  • str:原始字符串
  • start_pos:起始搜索位置(可以不填,默认值1)

五、获取json字符串里面的指定值

1、JSON_EXTRACT()

-- 语法:
JSON_EXTRACT(json_doc, path)

‌参数说明‌:

  • json_doc:JSON类型字段名或JSON字符串
  • path:JSON路径表达式(以$开头,支持.和[]访问对象/数组)
-- 提取JSON对象中的cusId字段
SELECT JSON_EXTRACT(zt.follow_up_source, '$.cusId') FROM table_name;
-- 提取数组第一个元素的name字段(索引从0开始)
SELECT JSON_EXTRACT('[{\"name\":\"John\"},{\"name\":\"Jane\"}]', '$[0].name');

2、JSON_UNQUOTE()

功能‌:移除JSON_EXTRACT返回值的引号,将JSON字符串转为普通文本

SELECT JSON_UNQUOTE(JSON_EXTRACT(info, '$.name')) FROM users WHERE id=1;
-- 等效简写:->>运算符(MySQL 5.7+支持)
SELECT info->>'$.name' FROM users;

MySQL 5.7+‌、mariadb10.2.0+:支持基础JSON函数

posted @ 2025-04-27 10:50  不然我哥  阅读(545)  评论(0)    收藏  举报