一、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函数