【问题标题】:Converting arrays to string in Google BigQuery [duplicate]在 Google BigQuery 中将数组转换为字符串 [重复]
【发布时间】:2021-05-13 07:14:26
【问题描述】:

我有一个类似的查询

SELECT lineid,
   array
   (
          select day_name positions
          FROM   unnest(regexp_extract_all(json_extract(json, '$.attributes.day-part-targeting.data.dayparts'), r'("+[A-Za-z]+"+:+"+[A-Za-z]+")')) pair,
                 unnest([STRUCT(CONCAT(REPLACE(SPLIT(pair, ':')[OFFSET(1)],'"',''),';') AS day_name)]) )day_part,
   array
   (
          SELECT start_time positions
          FROM   unnest(regexp_extract_all(json_extract(json, '$.attributes.day-part-targeting.data.dayparts'), r'"[^"]+":\[[\d,]*?]')) pair,
                 unnest([STRUCT(CONCAT(REPLACE(SPLIT(SPLIT(pair, ':')[OFFSET(1)],',')[OFFSET(0)],'[',''),':00;')AS start_time    )])) hour_part,
   array(
          SELECT end_time VALUES    
         FROM unnest(regexp_extract_all(json_extract(json, '$.attributes.day-part-targeting.data.dayparts'), r'"[^"]+":\[[\d,]*?]')) pair,
              unnest([STRUCT(CONCAT(REPLACE(REVERSE(SPLIT(REVERSE(SPLIT(pair, ':')[OFFSET(1)]),',')[OFFSET(0)]),']',''),':00;')AS end_time
)])
) time_part
FROM `project.dataset.table`

这给出了以下结果

我想要一个类似的输出

【问题讨论】:

  • 我已修改查询并已解决问题

标签: arrays string google-bigquery unnest


【解决方案1】:

我能够在 where 子句中使用偏移量来解决这个问题

SELECT lineid,
   day_part
FROM   (
            SELECT lineid,
                    array_to_string( array
                    (
                            select day_name
                            FROM   unnest(regexp_extract_all(json_extract(json, '$.attributes.day-part-targeting.data.dayparts'), r'("+[A-Za-z]+"+:+"+[A-Za-z]+")')) day WITH offset pos1,
                                unnest(regexp_extract_all(json_extract(json, '$.attributes.day-part-targeting.data.dayparts'), r'"[^"]+":\[[\d,]*?]')) hour WITH offset pos2,
                                unnest([STRUCT(CONCAT(REPLACE(SPLIT(day, ':')[OFFSET(1)], '"', ''), ';')|| format_time('%I:%M %p', parse_time('%H:%M', concat(replace(split(split(hour, ':')[OFFSET(1)], ',')[OFFSET(0)], '[', ''), ':00')))             || ';' || format_time('%I:%M %p', parse_time('%H:%M', concat(replace(reverse(split(reverse(split(hour, ':')[OFFSET(1)]), ',')[OFFSET(0)]), ']', ''), ':00'))) AS day_name )])
                            WHERE  pos1 = pos2), '|')day_part
            FROM   table )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    相关资源
    最近更新 更多