2017-02-13 27 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;