从sql查询中的列中获取多次出现的字符串
我有一个表,其中包含以下数据从sql查询中的列中获取多次出现的字符串,sql,google-bigquery,Sql,Google Bigquery,我有一个表,其中包含以下数据 Ticketid created Details 205853669 2020-03-05 #CLOSE# Next action value://346004/ next action value://346002/ or value://346008/ 205853670 2020-03-06 #Archive Next action value://346088/ next action value://346077/ or
Ticketid created Details
205853669 2020-03-05 #CLOSE# Next action value://346004/ next action value://346002/ or value://346008/
205853670 2020-03-06 #Archive Next action value://346088/ next action value://346077/ or value://346057/
字符串“value://”模式在所有列中都是相同的,我想从字符串中提取这些数字
ticketid Numbers
205853669 346004
205853669 346002
205853669 346008
205853670 346088
205853670 346077
205853670 346057
我只使用标准Sql
我已经创建了如下内容
select ticketid,TRIM(REPLACE(SUBSTR(
details, STRPOS(details, "value//"),10
),"value//"","")) AS number from table
下面的查询将起作用。此查询拆分对值的注释,然后提取6位id
with `project.dataset.table` as (
select id, split(details, 'value://') AS number from (
select '1' as id, '#CLOSE# Next action value://346004/ next action value://346002/ or value://346008/' as details
union all
select '2' as id, '#Archive Next action value://346088/ next action value://346077/ or value://346057/'
)
)
select id, regexp_extract(number1, "\\d{6}") as number
from `project.dataset.table` ,
UNNEST( number ) number1
where regexp_extract(number1, "\\d{6}") is not null
它有一个关于unest
函数的注释。根据文件
UNNEST操作符获取一个数组并返回一个表,其中数组中的每个元素对应一行
如果每个注释只有几个“值://”,那么这不会造成太多问题,但如果“值://”的数量不受限制,这可能会成为性能瓶颈,因此请记住这一点。另一方面,这是我知道如何使用CloudSQL实现这一点的唯一方法。下面是针对BigQuery标准SQL的
#standardSQL
SELECT Ticketid, Numbers
FROM `project.dataset.table`,
UNNEST(REGEXP_EXTRACT_ALL(Details, r'value://(\d+)/')) Numbers
如果要应用于问题中的样本数据,则输出为
Row Ticketid Numbers
1 205853669 346004
2 205853669 346002
3 205853669 346008
4 205853670 346088
5 205853670 346077
6 205853670 346057
请您解释一下“r’value://(\d+/)”)这部分。它提取
value://
和/
之间的数字。例如,它从value://346004/
Ok。谢谢,但是如果partten/文本类似于“value://346004 下一步行动”。我的意思是数字后面没有“/”。请使用r'value://(\d+)”
并告诉我它是否适合您