工作中,需要使用到表中字段的部分内容与其他表联表查询,使用到了mysql中的字符截取函数,在此记录
MySQL 字符串截取函数主要有:left(), right(), substring(), substring_index()
说明:left(被截取字段,截取长度)
mysql> select left('example',3);
+-------------------+
| left('example',3) |
+-------------------+
| exa |
+-------------------+
说明:right(被截取字段,截取长度)
mysql> select right('example',3);
+--------------------+
| right('example',3) |
+--------------------+
| ple |
+--------------------+
substring(被截取字段,从第几位开始截取,截取长度)
mysql> select substring('example',2,3);
+--------------------------+
| substring('example',2,3) |
+--------------------------+
| xam |
+--------------------------+
工作中使用到的业务场景:
库test_log中的log_interface日志表,需要查询某一段时间内所有的铃音编号并进行统计数量
字段input_para_info包含了铃音编号vId
例如:'TestSettingReq [vId=600926000000164601]'
SELECT
SUBSTRING(log_interface.input_para_info, 21, 18) AS ring_no,
COUNT(*) AS setting
FROM
test_log.`log_interface`
WHERE
AND log_interface.created_time > '2019-02-01 00:00:00'
AND log_interface.created_time < '2019-02-19 00:00:00'
GROUP BY
ring_no
注意:在函数 substring(str, pos, len)中, pos 可以是负值,但 len 不能取负值
说明:substring_index(被截取字段,关键字,关键字出现的次数)
截取第二个 '.' 之前的所有字符
mysql> select substring_index('www.example.com', '.', 2);
+--------------------------------------------+
| substring_index('www.example.com', '.', 2) |
+--------------------------------------------+
| www.example |
+--------------------------------------------+
如果关键字出现的次数是负数 如-2 则是从后倒数,到字符串结束
如:截取第二个'.'(倒数)之后的所有字符
mysql> select substring_index('www.example.com', '.',-2);
+--------------------------------------------+
| substring_index('www.example.com', '.',-2) |
+--------------------------------------------+
| example.com |
+--------------------------------------------+
如果在字符串中找不到 关键字,就返回整个字符串
mysql> select substring_index('www.example.com', '.css', 1);
+-----------------------------------------------+
| substring_index('www.example.com', '.css', 1) |
+-----------------------------------------------+
| www.example.com |
+-----------------------------------------------+
工作中使用到的业务场景:
库test.task中task_detail任务工具表中
description字段包含了省份以及几种会员的状态
例如:{"province":"海南","month":"非会员","vedio":"会员","result":"成功"}
现需要提取任务id为123456中,所有用户所在的省份和vedio的状态
SELECT
task_id,
phone_no,
SUBSTRING(description, 14, 2) AS province,
SUBSTR(substring_index(description, 'vedio":"', -1) FROM 1 FOR 3) AS vedio_status
FROM
test_task.`task_detail`
WHERE
task_id = '123456';
其中,SUBSTR(substring_index(description, 'vedio":"', -1) FROM 1 FOR 3) 截取"vedio":" 的后三位字符串
参考链接
https://www.cnblogs.com/lijiageng/p/6511334.html
https://www.cnblogs.com/zdz8207/p/3765073.html