下面是一个示例代码,其中包含一个用特殊字符“»”分区的长字符串。我需要拉出第一个和第三个特殊字符(»)之前的字符串。
with test as (
select 'AA»BB»CC»DD»EE»FF' string union all
select 'ZZ»XX»RR»PP»EE»FF' )
SELECT REGEXP_EXTRACT(string, r"([^»]*)") AS string_1 from test
使用代码中的正则表达式,我可以提取字符串的第一部分“AA”和“ZZ”。但是有没有办法在第三个特殊字符“»”之前提取字母,其中预期的输出应该是“CC”和“RR”
感谢您的帮助
答案 0 :(得分:2)
您可以使用SPLIT
代替正则表达式:
with test as (
select 'AA»BB»CC»DD»EE»FF' string union all
select 'ZZ»XX»RR»PP»EE»FF'
)
SELECT SPLIT(string, '»')[OFFSET(2)] AS string_1 from test
这会返回"CC"
和"RR"
作为输出。
答案 1 :(得分:1)
作为替代
#standardSQL
WITH test AS (
SELECT 'AA»BB»CC»DD»EE»FF' str UNION ALL
SELECT 'ZZ»XX»RR»PP»EE»FF'
)
SELECT code
FROM test, UNNEST(SPLIT(str, '»')) code WITH OFFSET pos
WHERE pos = 2
结果为
Row code
1 CC
2 RR