【问题标题】:need regexp_extract help, beginner需要 regexp_extract 帮助,初学者
【发布时间】:2022-01-17 01:45:49
【问题描述】:

我有字符串列“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

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

【问题讨论】:

    标签: sql regex hive hiveql qubole


    【解决方案1】:

    您可以使用 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-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 2018-01-18
      • 1970-01-01
      相关资源
      最近更新 更多