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