Извлечение текста из строки перед первым появлением символа - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть данные, которые выглядят так, как показано ниже -

type       A_URL                          B_URL             C_URL
A         123.com/123abc?....     123.com/123abc?....       123.com/123abc?....
B         pqr.com/435678?....     pqr.com/435678?....       pqr.com/435678?....
C         lmn.com/12u356?....     lmn.com/12u356?....       lmn.com/12u356?....

Я хочу создать URL-адрес нового столбца и выполнить следующее -

, если тип A - извлечь все, что предшествует первый '?' в столбце A_URL и сохраните его в новом URL-адресе столбца,

, если тип B - извлечь все, что предшествует first '?' в столбце B_URL и сохраните его в новом URL-адресе столбца,

, если тип равен C, извлеките все, что предшествует first '?' в столбце C_URL и сохраните его в новом столбце url

Результат должен выглядеть примерно так: первый "?" хранится в каждом из них.

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT * EXCEPT(url),
  REGEXP_EXTRACT(url, r'^[^?]+\?') AS url
FROM `project.dataset.table`,
UNNEST([CASE type 
  WHEN 'A' THEN A_URL 
  WHEN 'B' THEN B_URL 
  WHEN 'C' THEN C_URL 
END]) url
1 голос
/ 20 апреля 2020

Вы можете использовать regexp_extract():

select t.*,
       regexp_extract(case when type = 'A' then a_url
                           when type = 'B' then b_url
                           when type = 'C' then c_url
                      end,
                      '^[^?]+'

from t;

РЕДАКТИРОВАТЬ:

Если вы хотите сохранить окончательный ?, то используйте:

select t.*,
       regexp_extract(case when type = 'A' then a_url
                           when type = 'B' then b_url
                           when type = 'C' then c_url
                      end,
                      '^[^?]+[?]'

from t;
...