Sql 用于删除数据中某些文本的单个配置单元查询

Sql 用于删除数据中某些文本的单个配置单元查询,sql,hadoop,hive,hiveql,Sql,Hadoop,Hive,Hiveql,我有两种格式的列数据 1)“/abc/testapp/v1?FirstName=username&Lastname=test123” 2)“/abc/testapp/v1?FirstName=username” 我想将输出检索为“”/abc/testapp/v1?FirstName=username“,并去掉以“&Lastname”开头、以“”结尾的数据。这样做的目的是删除Lastname及其值。 但是,如果数据不包含“&Lastname”,那么根据第二个场景,它也应该可以正常工作 示例中显示的

我有两种格式的列数据

1)
“/abc/testapp/v1?FirstName=username&Lastname=test123”

2)
“/abc/testapp/v1?FirstName=username”

我想将输出检索为“
”/abc/testapp/v1?FirstName=username“
,并去掉以“&Lastname”开头、以“”结尾的数据。这样做的目的是删除Lastname及其值。 但是,如果数据不包含“&Lastname”,那么根据第二个场景,它也应该可以正常工作 示例中显示的Lastname的值为“test123”,但通常这是动态的

我从regexp_replace开始,但是我可以替换“&Lastname”,但不能替换它的值。
选择regexp\u replace(“/abc/testapp/v1?FirstName=username&Lastname=test123&type=en\u US”、“&Lastname”、”)

有人能在这里帮助我如何通过一个配置单元查询实现这两个功能吗?

对于有姓或无姓的两个查询,它的工作方式是使用
拆分
对于配置单元,无需选择任何表。您可以直接执行类似
选择函数名

select    
split("/abc/testapp/v1FirstName=username&Lastname=test123",'&')[0]
结果:

 _c0
    /abc/testapp/v1FirstName=username
您可以进行单个查询:

select    
split("/abc/testapp/v1FirstName=username&Lastname=test123",'&')[0],
split("/abc/testapp/v1FirstName=username",'&')[0]
使用拆分功能:

with your_data as (--Use your table instead of this example
select stack (2,
              "/abc/testapp/v1?FirstName=username&Lastname=test123",
              "/abc/testapp/v1?FirstName=username"
             ) as str
)

select split(str,'&')[0] from your_data;
结果:

_c0
/abc/testapp/v1?FirstName=username
/abc/testapp/v1?FirstName=username
或使用“&Lastname”模式进行拆分:

select split(str,'&Lastname')[0] from your_data;

它将允许使用除以&Lastname开头之外的其他内容这是您想要的输出吗?我们无法将Lastname的值硬编码为“&Lastname=test123”…在示例中,我将“test123”作为值,但通常它可以是任何内容。编辑了我的问题Hello@Ram,我们无法将Lastname的值硬编码为“&Lastname=test123”…在本例中,我给出了“test123”作为值,但通常它可以是任何值
_c0
/abc/testapp/v1?FirstName=username
/abc/testapp/v1?FirstName=username
select split(str,'&Lastname')[0] from your_data;