2017-02-13 22 views
0

当一个字符如“?”时,我想做一个左分割的URIs。或“#”出现。带有多个分界符的BigQuery SPLIT

SELECT 
CASE 
WHEN URI LIKE '%?%' THEN FIRST(SPLIT(URI, "?")) 
WHEN URI LIKE '%#%' THEN FIRST(SPLIT(URI, "#")) 
END WITHIN RECORD AS URI_FILTER 
FROM (SELECT "/A/A1/AA2/205.html#jfsalf" AS URI) 

输出必须:/A/A1/AA2/205.html

另一个URI进行测试:

/A/A1/AA2/205.html?pRef=209888 

错误:没有聚合函数应用范围

回答

1

我觉得regular expression这个

更适合
SELECT 
    URI, REGEXP_EXTRACT(URI, r'(.*?)[?#]') 
FROM 
    (SELECT "/A/A1/AA2/205.html#jfsalf" AS URI), 
    (SELECT "/A/A1/AA2/205.html?pRef=209888" as URI) 
1

使用REGEXP_EXTRACT。如果URI可能没有#?,则可以使用一个正则表达式来解释该情况:

#standardSQL 
WITH T AS (
    SELECT '/A/A1/AA2/205.html#jfsalf' AS path UNION ALL 
    SELECT '/A/A1/AA2/205.html?pRef=209888' AS path UNION ALL 
    SELECT '/A/A1/AA2/205.html' AS path 
) 
SELECT 
    REGEXP_EXTRACT(path, r'([^#?]+)') AS left_path 
FROM T;