在第一次出现符号之前从字符串中提取文本
Extracting text from a string before the first occurrence of a symbol
我有如下所示的数据-
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 提取 first '?' 之前的所有内容在 A_URL 列中并将其存储到新列 url,
如果类型是 B 提取 first '?' 之前的所有内容在 B_URL 列中并将其存储到新列 url,
如果类型是 C 提取 first '?' 之前的所有内容在 C_URL 列中并将其存储到新列 url
结果应该如下所示-
type A_URL B_URL C_URL url
A 123.com/123abc?.... 123.com/123abc?.... 123.com/123abc?.... 123.com/123abc?
B pqr.com/435678?.... pqr.com/435678?.... pqr.com/435678?.... pqr.com/435678?
C lmn.com/12u356?.... lmn.com/12u356?.... lmn.com/12u356?.... lmn.com/12u356?
注意:虽然 A_URL、B_URL 和 C_URL 在上面看起来一样,但在第一个“?”之后有不同的信息。存储在他们每个人中。
您可以使用 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;
以下适用于 BigQuery 标准 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
我有如下所示的数据-
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 提取 first '?' 之前的所有内容在 A_URL 列中并将其存储到新列 url,
如果类型是 B 提取 first '?' 之前的所有内容在 B_URL 列中并将其存储到新列 url,
如果类型是 C 提取 first '?' 之前的所有内容在 C_URL 列中并将其存储到新列 url
结果应该如下所示-
type A_URL B_URL C_URL url
A 123.com/123abc?.... 123.com/123abc?.... 123.com/123abc?.... 123.com/123abc?
B pqr.com/435678?.... pqr.com/435678?.... pqr.com/435678?.... pqr.com/435678?
C lmn.com/12u356?.... lmn.com/12u356?.... lmn.com/12u356?.... lmn.com/12u356?
注意:虽然 A_URL、B_URL 和 C_URL 在上面看起来一样,但在第一个“?”之后有不同的信息。存储在他们每个人中。
您可以使用 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;
以下适用于 BigQuery 标准 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