2017-02-13 2 views
0

Я хочу сделать левый разделительный URI, когда персонаж вроде «?» или "#".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; 
Смежные вопросы