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;