SQL удалить текст перед заданной строкой (сокращение URL до URL Path) - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь удалить текст в URL, чтобы такой URL, как https://www.nike.com/w/nike-free-5-shoes-3apemzy7ok, превратился в / w / nike-free-5-shoes-3apemzy7ok

или https://www.kohls.com/search/mens.jsp становится /search/mens.jsp

Я не могу использовать ПРАВУЮ функцию, так как существует несколько разных доменов, поэтому количество символов, которое необходимо переместить, изменяется из регистра к основанию случая.

Кто-нибудь знает, как написать запрос SQL, который может поддержать это усилие?

Я думал о том, что что-то ищет «.com» и использует джокер для удаления «.com» + все до «.com»

Тем не менее, я не смог понять, как это сделать после значительного количества исследований.

Цените помощь!

Ответы [ 3 ]

1 голос
/ 11 апреля 2020

Ниже для BigQuery Standard SQL

REGEXP_EXTRACT(url, NET.HOST(url) || '[^/]*/(.+)')

Вы можете проверить, поиграть с выше, используя солнечные данные, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'https://www.nike.com/w/nike-free-5-shoes-3apemzy7ok' AS url UNION ALL
  SELECT 'https://www.kohls.com/search/mens.jsp' UNION ALL
  SELECT 'www.Example.Co.UK/1/2/3' UNION ALL
  SELECT 'www.Example.Co.UK:80/1/2/3' UNION ALL
  SELECT 'https://www.Example.Co.UK:80/1/2/3' 
)
SELECT url, 
  REGEXP_EXTRACT(url, NET.HOST(url) || '[^/]*/(.+)') path
FROM `project.dataset.table`   

с выводом

Row url                                                     path     
1   https://www.nike.com/w/nike-free-5-shoes-3apemzy7ok     w/nike-free-5-shoes-3apemzy7ok   
2   https://www.kohls.com/search/mens.jsp                   search/mens.jsp  
3   www.Example.Co.UK/1/2/3                                 1/2/3    
4   www.Example.Co.UK:80/1/2/3                              1/2/3    
5   https://www.Example.Co.UK:80/1/2/3                      1/2/3    
0 голосов
/ 11 апреля 2020

В BigQuery вы можете использовать regexp_extract():

select regexp_replace(url, '^.*//[^/]+/(.*)$', '\\1')
from (select 'https://www.nike.com/w/nike-free-5-shoes-3apemzy7ok' as url union all
      select 'https://www.kohls.com/search/mens.jsp' 
     ) x;
0 голосов
/ 11 апреля 2020

Если ни один из URL-адресов не побеждает логи c из «найти первое sla sh после первого двойного sla sh», вы можете:

SELECT SUBSTRING(url, CHARINDEX('/', url, CHARINDEX('//', url) + 2)) + 1, 9999)

в английском sh this is "начало строки (сразу после индекса первого sla sh в URL, начинающегося сразу после индекса первого двойного sla sh) и длины больше, чем у остальной части строки (= до конца строки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...