字符串函数
- 字符串函数
- 字符串长度函数: length
- 字符串反转函数: reverse
- 字符串连接函数:concat
- 带分隔符字符串连接函数:concat_ws
- 字符串截取函数:substr,substring(string A, intstart, int len)
- 字符串转大写函数:upper,ucase
- 字符串转小写函数:lower,lcase
- 去空格函数:trim
- 左边去空格函数:ltrim
- 右边去空格函数:rtrim
- 正则表达式替换函数:regexp_replace
- 正则表达式解析函数:regexp_extract
- URL解析函数:parse_url [HOST,PATH,QUERY,REF,PROTOCOL,FILE,AUTHORITY,USERINFO]
- json解析函数:get_json_object
- 空格字符串函数:space
- 重复字符串函数:repeat
- 首字符ascii函数:ascii
- 左补足函数:lpad
- 右补足函数:rpad
- 分割字符串函数: split
- 集合查找函数: find_in_set
- 数组是否包含函数:array_contains
- array_contains实例1:替换同一字段多个<>
- array_contains实例2:打标签
- 查找函数: instr(str,substr)
字符串函数
- 字符串长度函数:length
- 字符串反转函数:reverse
- 字符串连接函数:concat
- 带分隔符字符串连接函数:concat_ws
- 字符串截取函数:substr,substring
- 字符串截取函数:substr,substring
- 字符串转大写函数:upper,ucase
- 字符串转小写函数:lower,lcase
- 去空格函数:trim
- 左边去空格函数:ltrim
- 右边去空格函数:rtrim
- 正则表达式替换函数:regexp_replace
- 正则表达式解析函数:regexp_extract
- URL解析函数:parse_url [HOST,PATH,QUERY,REF,PROTOCOL,FILE,AUTHORITY,USERINFO]
- json解析函数:get_json_object
- 空格字符串函数:space
- 重复字符串函数:repeat
- 首字符ascii函数:ascii
- 左补足函数:lpad
- 右补足函数:rpad
- 分割字符串函数: split
- 集合查找函数: find_in_set
- 数组是否包含函数:array_contains
- 查找函数: instr(str,substr)
字符串长度函数: length
- 语法: length(string A)
- 返回值: int
- 说明:返回字符串A的长度
- 举例:
hive> select length('abcedfg') from dual;
7
字符串反转函数: reverse
- 语法: reverse(string A)
- 返回值: string
- 说明:返回字符串A的反转结果999999举例:
hive> select reverse(abcedfg’) from dual;
gfdecba
字符串连接函数:concat
- 语法:concat (str1,str2,…) ;
- 返回值:string;
如有任何一个参数为null ,则返回值为 null。
select concat("my","name");
myname
带分隔符字符串连接函数:concat_ws
- 语法:concat_ws(string SEP, string1, string2… );
- 返回值:string;
- 分隔符可以是一个字符串,也可以是其它参数。
如果分隔符为 null,则结果为 null,拼接的字符串为null,则会忽略该字符串。
select concat_ws("\t","my","name");
my name
字符串截取函数:substr,substring(string A, intstart, int len)
select substring("myname",0,2);
my
字符串转大写函数:upper,ucase
select upper("myname");
MYNAME
字符串转小写函数:lower,lcase
select lower("MYNAME");
myname
去空格函数:trim
select trim(" myname ");
myname
左边去空格函数:ltrim
select ltrim(" my name");
my name
右边去空格函数:rtrim
select rtrim(" my name ");
my name
正则表达式替换函数:regexp_replace
SELECT regexp_replace('100-200', '(\\d+)', 'num');
num-num
正则表达式解析函数:regexp_extract
SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1)
;--100
select regexp_extract('foothebar', 'foo(.*?)(bar)', 1)
;--the
select regexp_extract('isStartDate=2019-07-14', '.*?StartDate\\=([^&]+)',1)
; --2019-07-14
URL解析函数:parse_url [HOST,PATH,QUERY,REF,PROTOCOL,FILE,AUTHORITY,USERINFO]
SELECT parse_url('http://facebook.com/path/p1.php?query=1', 'HOST');
facebook.com
json解析函数:get_json_object
空格字符串函数:space
SELECT space(2);
两个空格
重复字符串函数:repeat
SELECT repeat('123', 2);
123123
首字符ascii函数:ascii
SELECT ascii('31');
51返回3的asc码
左补足函数:lpad
SELECT lpad('hive2', 10, '1');
11111hive2
右补足函数:rpad
SELECT rpad('hive2', 10, '1');
ive211111
分割字符串函数: split
SELECT split('oneAtwoBthreeC', '[ABC]');
["one","two","three",""]
集合查找函数: find_in_set
SELECT find_in_set('ab','abc,b,ab,c,def');
3
数组是否包含函数:array_contains
- array_contains(数组,值),返回布尔类型值。
- Hive中的array_contains函数与SQL中的 in关键字 操作类似,用于判定
包含(array_contains)或不包含(!array_contains)关系。与
in不同的是array_contains可以用于判断一张表中同一个id的多条记录中的同一字段是否包含指定的一个或多个值。 需要注意字段类型保持一致,若不一致则需要进行强制类型转换。
select split('[1,2,3,4]', '[\\[\\],]');
-- ["","1","2","3","4",""]
select array_contains(split('[1,2,3,4]', '[\\[\\],]'),'1');
-- true
array_contains实例1:替换同一字段多个<>
- where 条件对于同一字段多个<>时可以替换
select *
from login
where dt='20220101'
and (ver !='3.1' and ver !='3.2'
and ver != '4.0'
and ver != '5.2');
可以替换为
select *
from login
where dt='20220101'
and !array_contains(split('3.1,3.2,4.0,5.2',','),ver)
;
array_contains实例2:打标签
select
stu_id
, case
when array_contains(collect_set(subject), '语文')
or array_contains(collect_set(subject), '数学')
or array_contains(collect_set(subject), '英语')
then '基础'
when array_contains(collect_set(subject), '科学')
then '拓展'
else '其他'
end as subject_tag_name
from student
where
dt = '20220101'
group by
stu_id
查找函数: instr(str,substr)
- 功能
- 返回str中第一次出现substr的索引
- instr函数返回字符串str中子字符串substr第一次出现的位置,其中第一字符的位置是1,如果 str不含substr返回0
- 示例
select instr("abcde",'b');
-- 2
select instr("abcdeabcde",'b');
-- 2
select instr("abcde",'f');
-- 0
select
case when (instr("你是who呢", '你是') != 0 AND instr("你是who呢", '你是谁') = 0)
then '包含:你是而不包含你是谁'
end
;
--网上有说可以 指定 搜索的开始位置,默认为1,测试不可以
select instr("abcdeabcde",'b',2,1);
--Error while compiling statement: FAILED: SemanticException [Error 10015]: Line 2:7 Arguments length mismatch '1': The function INSTR accepts exactly 2 arguments.