2

我有字符串列“49b8b35e-b62c-4a42-9d73-192d131d127a,03c8a7e0-5153-11ec-873a-0242ac11000a,eec8aee4-0500-4940-b319-15924cc2d248”

此字符串列有 3 个值,由“,”分隔。(值 1,值 2,值 3)。不能保证 vaule2 和 value3 必须始终存在。但 value1 总是如此。

所以我需要将此单列拆分为 3 个不同的列,同时牢记它们存在的上述条件,并且它们需要在“,”之前分隔成一个新列。

到目前为止,我写过

select regexp_extract('49b8b35e-b62c-4a42-9d73-192d131d127a,03c8a7e0-5153-11ec-873a-0242ac11000a,eec8aee4-0500-4940-b319-15924cc2d248', '^(.+?),') as value1

但在那之后,我的逻辑和思维给了我错误,我没有运气。

4

1 回答 1

0

您可以使用 split() 函数,它返回数组,您可以使用数组索引 [] 访问元素:

select split("49b8b35e-b62c-4a42-9d73-192d131d127a,03c8a7e0-5153-11ec-873a-0242ac11000a,eec8aee4-0500-4940-b319-15924cc2d248",',')[0] --to get first element

对第一个元素使用 [0],对第二个元素使用 [1],对第三个元素使用 [2],如果某些元素不存在且没有逗号(例如 split() 返回 size=1 的数组并且您想要第二个元素),它将返回NULL,如果逗号存在但它们之间有空字符串,它将返回空,因此请相应地调整您的逻辑。

如果您更喜欢 regexp_extract 函数:

 regexp_extract('49b8b35e-b62c-4a42-9d73-192d131d127a,03c8a7e0-5153-11ec-873a-0242ac11000a,eec8aee4-0500-4940-b319-15924cc2d248', '^([^,]+),*([^,]*),*([^,]*)',1) as value1,
 regexp_extract('49b8b35e-b62c-4a42-9d73-192d131d127a,03c8a7e0-5153-11ec-873a-0242ac11000a,eec8aee4-0500-4940-b319-15924cc2d248', '^([^,]+),*([^,]*),*([^,]*)',2) as value2,
 regexp_extract('49b8b35e-b62c-4a42-9d73-192d131d127a,03c8a7e0-5153-11ec-873a-0242ac11000a,eec8aee4-0500-4940-b319-15924cc2d248', '^([^,]+),*([^,]*),*([^,]*)',3) as value3

使用相同的模式,只是组号不同。如果元素不存在,则 regexp_extract 返回空字符串。

于 2021-12-13T16:19:58.413 回答