mysql字符串截取

工作中,需要使用到表中字段的部分内容与其他表联表查询,使用到了mysql中的字符截取函数,在此记录

 

MySQL 字符串截取函数主要有:left(), right(), substring(), substring_index()

1left(str,length) 

说明:left(被截取字段,截取长度)

mysql> select left('example',3);
+-------------------+
| left('example',3) |
+-------------------+
| exa               |
+-------------------+

 

2、right(str,length) 

说明:right(被截取字段,截取长度)

mysql> select right('example',3);
+--------------------+
| right('example',3) |
+--------------------+
| ple                |
+--------------------+

3、substring(str,pos,len)

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 不能取负值

 

4、substring_index(str,delim,count);

说明: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

你可能感兴趣的:(数据库)