hql面试题之字符串使用split分割,并选择其中的一部分字段的问题

版本:20231109

1.题目:

有两张表,a表有id和abstringr两个字段,b表也有id和bstr两个字段,具体如下
A表:

1 abc,bcd,cdf
2 123,456,789

B表:

1 acddef
2 123456

在a表的abstring字段中用‘,’分割,并取出前两个字段,然后合并,并且与b表的bstr进行对比,最后求出字段不相同的字段。

1.首先测试建立A表和B表

create table if not exists split_test(
id int comment 'id',
str string comment '字符串'
)comment '逗号字符串分割练习表A'
create table if not exists spl_test(
id int comment 'id',
str2 string comment '字符串'
)comment '逗号字符串分割练习表B'

2.插入数据

insert into split_test values(1,'abc,bcd,cdf'),(2,'123,456,789')
insert into spl_test values(1,'acddef'),(2,'123456')

2.思路:使用split函数

语法: split(string str, string pat)
返回值: array
说明: 按照pat字符串分割str,会返回分割后的字符串数组
这里我们用’,'来分割字符串产生一个字符串数组,在使用concat来关联
在这里插入图片描述

select id,concat(split(str,',')[0],split(str,',')[1]) from split_test;

在这里插入图片描述

最终结果再将A表和B表join做关联

select *
from
(select 
    id,
    concat(split(str,',')[0],split(str,',')[1]) as str_1
    from split_test) a
left join 
    spl_test b
on a.id= b.id and a.str_1 <> b.str2;

你可能感兴趣的:(hql,linux,hive,hive,sql)