【问题标题】:Extract string between a word, and a character提取单词和字符之间的字符串
【发布时间】:2020-04-29 23:48:33
【问题描述】:

对于 PostgreSQL。

我有一个字符串,其中包含用于广告活动的元数据。

示例:date:20200429-category:phones-audience:youth-promo:nooffer

我希望能够为每个键/对提取值,例如为类别列提取电话,为受众列提取青年。

编辑:
现在我在我做的地方有它: split_part(split_part(example_string_field, 'category:',2),'-',1) 但是好像有点乱。

寻求帮助,谢谢。

【问题讨论】:

  • 数据杂乱无章。你的解决方案很好。
  • Redshift 还是 Postgres?虽然它们有一些古老的根源,但它们是完全不同的产品

标签: sql regex postgresql amazon-redshift


【解决方案1】:

我认为你可以使用正则表达式:

regexp_substr(str, 'category:([^-])+', 1, 1, 'e')

【讨论】:

    【解决方案2】:

    我基本同意 Bohemian 的观点,即您的解决方案很好,但您可以通过一些字符串操作将其传递到键值表中,这使得最后一步只是针对单个列的一组选择。使解析新列更容易一些,只需在 crosstabbed_data 中添加另一行。

    testdb=# with input_rows as (
    select 'date:20200429-category:phones-audience:youth-promo:nooffer' as data
    UNION ALL
    select 'date:20200430-category:tablet-audience:olds-promo:offer'
    ),
    eav_data as (
    SELECT rownum, k_v[1] part, k_v[2] val
    FROM
      (
      SELECT rownum, string_to_array(item, ':') AS k_v
      FROM (select rownum, unnest(items) as item from (
        select row_number() over () as rownum, string_to_array(data, '-') as items from input_rows)_0
      )_1 )_2
    ),
    rownums as (select rownum as num from eav_data group by rownum),
    crosstabbed_data as (
    select
      (select val from eav_data where rownum=num and part='date') as date,
      (select val from eav_data where rownum=num and part='category') as category,
      (select val from eav_data where rownum=num and part='audience') as audience,
      (select val from eav_data where rownum=num and part='promo') as promo
    from rownums)
    select * from crosstabbed_data;
       date   | category | audience |  promo  
    ----------+----------+----------+---------
     20200429 | phones   | youth    | nooffer
     20200430 | tablet   | olds     | offer
    (2 rows)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-12
      • 1970-01-01
      • 2012-04-13
      • 2019-11-10
      • 1970-01-01
      • 2021-11-05
      • 2021-09-08
      • 2017-04-04
      相关资源
      最近更新 更多