本篇博客介绍一些常用的简单字符串函数用法。较为复杂的字符串函数后续博客会分别单独介绍。
返回数值类型 | 函数名\所需参数\参数数据类型 | 描述 |
---|---|---|
string |
concat(string|binary A, string|binary B...) |
对二进制字节码或字符串按次序进行拼接,例如, concat('foo', 'bar')返回 'foobar'.这个函数可以连接任意数量的字符串。 |
string |
concat_ws(string SEP, string A, string B...) |
与concat()类似,但使用指定的分隔符进行连接 |
string |
substr(string|binary A, int start) substring(string|binary A, int start) |
对于字符串A,从start位置开始截取字符串并返回 |
string |
substr(string|binary A, int start, int len) substring(string|binary A, int start, int len) |
对于二进制/字符串A,从start位置开始截取长度为length的字符串并返回 |
array |
split(string str, string pat) |
按照正则表达式pat来分割字符串str,并将分割后的数组字符串的形式返回 |
string |
format_number(number x, int d) |
将数值X转换成"#,###,###.##"格式字符串,并保留d位小数,如果d为0,将进行四舍五入且不保留小数 |
int |
length(string A) |
返回字符串A的长度 |
string |
lower(string A) lcase(string A) |
将字符串A中的字母转换成小写字母, 例如, lower('fOoBaR') 返回 'foobar'. |
string |
upper(string A) ucase(string A) |
将字符串A中的字母转换成大写字母,例如,upper('fOoBaR') 返回 'FOOBAR'.. |
string | initcap(string A) | 将字符串A转换第一个字母大写,其余字母小写的字符串 (As of Hive 1.1.0.) |
string |
lpad(string str, int len, string pad) |
从左边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分 |
string |
rpad(string str, int len, string pad) |
从右边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分 |
string |
ltrim(string A) |
将字符串A前边出现的空格去掉 |
string |
rtrim(string A) |
将字符串A后边出现的空格去掉 |
string |
trim(string A) |
将字符串A前后出现的空格去掉 |
string |
repeat(string A, int n) |
返回n个字符串A连接成的字符串 |
string |
reverse(string A) |
返回字符串A倒序的字符串 |
所有的函数所传的参数都可以是字段或者自定义的数据,这里为了演示方便,统一使用自定义数据。
concat(string|binary A, string|binary B...)
功能:对二进制字节码或字符串按次序进行拼接,这个函数可以连接任意数量的字符串。
hive (app)> select concat('a','b');
ab
hive (app)> select concat('a','b','c');
abc
concat_ws(string SEP, string A, string B...)
功能:第一个参数SEP是剩余参数间的分隔符,如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。总之与concat()类似,但使用指定的分隔符SEP,对后面的字符串或字符串数组进行连接。
使用-连接'2019','07','08'
hive (app)> select concat_ws('-','2019','07','08');
2019-07-08
函数会跳过分隔符参数后的任何 NULL 和空字符串
hive (app)> select concat_ws('-','2019',NULL,'08');
2019-08
如果分隔符是 NULL,返回值也将为 NULL
hive (app)> select concat_ws(NULL,'2019','07','08');
NULL
substr(string|binary A, int start)
substr(string|binary A, int start, int len)
功能:substr函数有两种用法,一种是只传入要截取的字符串A和开始截取字符串的位置start(即第几个字符),返回从开始到字符串结束所有的字符;
第二种是传入要截取的字符串A、开始截取字符串的位置start、截取字符串的长度,返回从开始指定长度的字符串。
substring与substr用法一致。
截取'2019-07-08 12:00:00'从第六个字符开始到最后左右的字符串
hive (app)> select substr('2019-07-08 12:00:00',6);
07-08 12:00:00
截取'2019-07-08 12:00:00'从第1个字符开始,长度为10个字符的字符串,即只截取日期
hive (app)> select substr('2019-07-08 12:00:00',1,10);
2019-07-08
当开始位置传入-1时,会返回该字符串的最后一个字符
hive (app)> select substr('2019-07-08',-1);
8
split(string str, string pat)
功能:传入要分割的字符串,和指定分隔符,返回一个由分割后的字符串组成的数组。
按-将2019-07-08分割
hive (app)> select split('2019-07-08','-');
["2019","07","08"]
查看分割后返回数组中的第1个元素,在数组中,第一个元素的下标为0
hive (app)> select split('2019-07-08','-')[0];
2019
查看分割后返回数组中的第2个元素
hive (app)> select split('2019-07-08','-')[1];
07
查看分割后返回数组中的第3个元素
hive (app)> select split('2019-07-08','-')[2];
08
当字符串的分隔符为特殊字符时,需要使用\\进行转义,比如:.
hive (app)> select split('2019.07.08','.');
["","","","","","","","","","",""]
hive (app)> select split('2019.07.08','\\.');
["2019","07","08"]
format_number(number x, int d)
功能:将数值X转换成"#,###,###.##"格式字符串,并保留d位小数,如果d为0,将进行四舍五入且不保留小数。
hive (app)> select format_number(10000000.123,1);
10,000,000.1
length(string A)
功能:返回字符串A的长度,如果A不是string格式,Hive会自动将其转为string格式。
hive (app)> select length('abcd');
4
hive (app)> select length(1234);
4
lower(string A)
功能:将字符串A中的所有字母转换成小写字母。
hive (app)> select lower('ABCdef');
abcdef
upper(string A)
功能:将字符串A中的所有字母转换成大写字母。
hive (app)> select upper('ABCdef');
ABCDEF
initcap(string A)
功能:将字符串A中的所有字母转换成首字母大写其余小写。
hive (app)> select initcap('ABCdef');
Abcdef
lpad(string str, int len, string pad)
功能:从左边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分。
hive (app)> select lpad('abc',6,'1');
111abc
rpad(string str, int len, string pad)
功能:从右边开始对字符串str使用字符串pad填充,最终len长度为止,如果字符串str本身长度比len大的话,将去掉多余的部分。
hive (app)> select rpad('abc',6,'1');
abc111
trim(string A)
功能:将字符串A前后出现的空格都去掉,此函数使用频率极高,表中的数据如果关联不上很有可能是数据前或后有空格!
hive (app)> select trim(' abc');
abc
hive (app)> select trim('abc ');
abc
hive (app)> select trim(' abc ');
abc
repeat(string str, int n)
功能:返回n个字符串A连接成的字符串。
hive (app)> select repeat('abc',2);
abcabc
reverse(string A)
功能:返回字符串A倒序的字符串。
hive (app)> select reverse('abc');
cba
能看到这里的同学,就右上角点个赞吧,3Q~