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