sql:mysql:函数:字符串函数

78 篇文章 10 订阅

mysql 字符串截取

MySQL 字符串截取函数:left(), right(), substring(), substring_index()。还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,substring() 的功能非常强大和灵活。  
1. 字符串截取:left(str, length)  
mysql> select left('sqlstudy.com', 3);  
+-------------------------+  
| left('sqlstudy.com', 3) |  
+-------------------------+  
| sql                     |  
+-------------------------+  
2. 字符串截取:right(str, length)  
mysql> select right('sqlstudy.com', 3);  
+--------------------------+  
| right('sqlstudy.com', 3) |  
+--------------------------+  
| com                      |  
+--------------------------+  
3. 字符串截取:substring(str, pos); substring(str, pos, len)  
3.1 从字符串的第 4 个字符位置开始取,直到结束。  
mysql> select substring('sqlstudy.com', 4);  
+------------------------------+  
| substring('sqlstudy.com', 4) |  
+------------------------------+  
| study.com                    |  
+------------------------------+  
3.2 从字符串的第 4 个字符位置开始取,只取 2 个字符。  
mysql> select substring('sqlstudy.com', 4, 2);  
+---------------------------------+  
| substring('sqlstudy.com', 4, 2) |  
+---------------------------------+  
| st                              |  
+---------------------------------+  
3.3 从字符串的第 4 个字符位置(倒数)开始取,直到结束。  
mysql> select substring('sqlstudy.com', -4);  
+-------------------------------+  
| substring('sqlstudy.com', -4) |  
+-------------------------------+  
| .com                          |  
+-------------------------------+  
3.4 从字符串的第 4 个字符位置(倒数)开始取,只取 2 个字符。  
mysql> select substring('sqlstudy.com', -4, 2);  
+----------------------------------+  
| substring('sqlstudy.com', -4, 2) |  
+----------------------------------+  
| .c                               |  
+----------------------------------+  
我们注意到在函数 substring(str,pos, len)中, pos 可以是负值,但 len 不能取负值。  
4. 字符串截取:substring_index(str,delim,count)  
4.1 截取第二个 '.' 之前的所有字符。  
mysql> select substring_index('www.sqlstudy.com.cn', '.', 2);  
+------------------------------------------------+  
| substring_index('www.sqlstudy.com.cn', '.', 2) |  
+------------------------------------------------+  
| www.sqlstudy                                   |  
+------------------------------------------------+  
4.2 截取第二个 '.' (倒数)之后的所有字符。  
mysql> select substring_index('www.sqlstudy.com.cn', '.', -2);  
+-------------------------------------------------+  
| substring_index('www.sqlstudy.com.cn', '.', -2) |  
+-------------------------------------------------+  
| com.cn                                          |  
+-------------------------------------------------+  
4.3 如果在字符串中找不到 delim 参数指定的值,就返回整个字符串  
mysql> select substring_index('www.sqlstudy.com.cn', '.coc', 1);  
+---------------------------------------------------+  
| substring_index('www.sqlstudy.com.cn', '.coc', 1) |  
+---------------------------------------------------+  
| www.sqlstudy.com.cn                               |  
+---------------------------------------------------+  
 4.4 截取一个表某个字段数据的中间值 如该字段数据为  1,2,3  
mysql> select substring_index(substring_index(该字段, ',', 2) , ',', -1) from 表名;    
+--------------------------------------------------------------+    
| substring_index(substring_index(该字段, ',', 2);  , ',', -1)|    
+--------------------------------------------------------------+    
| 2                                        |    
+--------------------------------------------------------------+

 

locate(字符,字段名):

使用locate(字符,字段名)函数,

如果包含,返回>0的数(这个数是这个字符在这个字段中的字符串中的位置),否则返回0

语法: locate(string substr, string str[, int pos])
返回值: int
说明:返回字符串 substr 在 str 中从 pos 后查找,首次出现的位置

hive> select locate('a','abcda',1);
OK
1
Time taken: 0.391 seconds, Fetched: 1 row(s)
hive> select locate('a','abcda',2);
OK
5
Time taken: 0.406 seconds, Fetched: 1 row(s)

 

replace(str,from_str,to_str) :
在字符串 str 中所有出现的字符串 from_str 均被 to_str替换,然后返回这个字符串。

例子:

select 
province_name,
case 
  when locate('省',province_name)>0 then replace(province_name,'省','')
   when locate('市',province_name)>0 then replace(province_name,'市','')
    when locate('广西壮族自治区',province_name)>0 then replace(province_name,'壮族自治区','')
    when locate('新疆维吾尔自治区',province_name)>0 then replace(province_name,'维吾尔自治区','')
      when locate('西藏自治区',province_name)>0 then replace(province_name,'自治区','')
       when locate('宁夏回族自治区',province_name)>0 then replace(province_name,'回族自治区','')
       when locate('内蒙古自治区',province_name)>0 then replace(province_name,'自治区','')
 else  province_name
  end province_name,
sum(curr_position) value from t_cal_positions where left(statistic_time,7) = '2018-12' group by province_name

效果(中间那列):

 

find_in_set(str,strlist):

参考:https://blog.csdn.net/weixin_38750084/article/details/103052096

str 要查询的字符串
strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包含(str)的结果

实例1: 

 必须全字符才能匹配上。

实例2:

 

 

instr(str,substr) :

在一个字符串(str)中搜索指定的字符(substr),返回发现指定的字符的位置(index); 
str 被搜索的字符串 
substr 希望搜索的字符串 
结论:在字符串str里面,字符串substr出现的第一个位置(index),index是从1开始计算,如果没有找到就直接返回0,没有返回负数的情况。

 

select 
title,
salary_request,
instr(title,'员'),
case
when 
instr(title,'员')>0 then 111111
end salary_request1
 from t_positions;

 

 

format_number(number x, int d)

小数位格式化成字符串函数:format_number
语法: format_number(number x, int d)
返回值: string
说明:将数值 x 的小数位格式化成 d 位,四舍五入

hive> select format_number(5.23456,3) from iteblog;
OK
5.235

concat_ws(string SEP, array)

 

数组转换成字符串的函数:concat_ws


语法: concat_ws(string SEP, array)
返回值: string
说明:返回将数组链接成字符串后的结果,SEP 表示各个字符串间的分隔符

hive> select concat_ws('|',array('a','b','c')) from iteblog;
OK
a|b|c
 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值