MYSQL 高阶函数
行内拼接
1.拼接字符串
concat(F1,…,Fn);
F1,…Fn 为拼接字段,分隔符为逗号,将各字段隔开
2.指定分隔符拼接
concat_ws(sep,F1,…Fn);
F1,…Fn 同为拼接字段,sep为指定分隔符
如:concat_ws(’:’,‘aa’,‘bb’,‘cc’);
分组收集函数
-
将该列所有行收集为一个集合
Collect_list(FIELD) -
将该列所有行收集为一个去重后的集合
collect_set(FIELD)
分组组内拼接字符串
分组后把聚合的数据都拼接成一个长字符串
group_concat(FIELD)
在field后可以排序按照使聚合数据按照一定的顺序来拼接
ASC:顺序 DESC:逆序
group_concat(FIELD[order by field ASC/DESC])
日期增减函数
date_add(date,interval num unit);
date 为需要被运算的原始日期
num 为指定的数量 (正数为加,负数为减)
unit 为指定的单位(天、月、年)
如:
date_add(date,interval 1 day);
date_add(date,interval -1 month);
date_add(date,interval 1 year);
截取字符串
substring_index(string,delimiter,count);
string 为需要被截取的源字符串
delimiter 为分隔符
count 为数量
当count为正数时,指前几个分割符。该函数就是在string 中截取前几个分隔符之前的所有内容
当count为负数时,指后几个分隔符.该函数就是在string 中截取后几个分隔符之前的所有内容
如:
substring_index(‘V1,V2,V3,…’,’,’,3 ) => V1,V2,V3
当需要提取第N个分隔符前的元素时怎么办呢:
substring_index(substring_index(string,delimiter,n),delimiter,-1)
集合包含函数
find_in_set(FIELD/CONST,‘V1,V2,…’);
判断 field字段是否在后面的集合中,若field在第n个逗号前则返回n
定位子字符串在父字符串中的位置
1.从startPos(inclusive)开始在string中找到substr首次出现的位置
如果 substrnull || stringnull return null
如果 substr not in string return 0
否则 返回1~char_length(string)
locate(substr,string[,startPos])
2.返回substr在string中第一次出现的首字符的位置
instr(string,substr)