Обеспечить решение JavaScript UDF. Не потому, что это лучше для этого сценария, но это всегда ваша последняя надежда, когда все становится действительно сложно.
(Также хочу отметить, что в URL могут существовать двойные слеши, например: https://www.stackoverflow.com//questions//ask,, для обработки которых вам может потребоваться дополнительная логика, закодированная в JavaScript)
#standardSQL
CREATE TEMP FUNCTION
remove_last_part_from_url(url STRING)
RETURNS STRING
LANGUAGE js AS """
var last_slash = url.lastIndexOf('/');
var first_double_slash = url.indexOf('//');
if (first_double_slash != -1
&& last_slash != -1
&& last_slash != first_double_slash + 1) {
return url.substr(0, last_slash);
}
return url;
""" ;
SELECT remove_last_part_from_url(url)
FROM (SELECT 'https://www.stackoverflow.com/questions/ask' as url UNION ALL
SELECT 'https://www.stackoverflow.com/questions' as url UNION ALL
SELECT 'https://www.stackoverflow.com//questions' as url UNION ALL -- double slash after https://
SELECT 'https:/invalid_url' as url UNION ALL
SELECT 'https://www.stackoverflow.com' as url
)