2014-11-20 3 views
0

У меня есть два вопроса: Учитывая столбец с именем URL (в таблице ссылок), который содержит примеры URL-адресов.Код подстроки SQL

вещи, как http://facebook.com/hello мне нужно извлечь все до первого/так http://facebook.com или https://www.cnn.com/video/data/2.0/video/tech/2014/10/30/pkg-future-of-travel-jet-engine-leap-plane.cnn.html выход будет https://cnn.com

Это то, что у меня есть, но я не уверен, если его точная логика.

select distinct SUBSTRING (url,0,(CHARINDEX('/'), URL,0)) 
from links 

Также мне нужна версия MYSQL. Который я не совсем уверен, это то, что у меня есть. Просьба сообщить. Спасибо

ответ

2

выберите зиЬзЬг (URL, 1, местонахождение ('/', URL (местонахождение ('//', URL) +3)) - 1) от ...

Например, это:

выберите SubStr ('а: //bott.com/xxxx', 1, местонахождение ('/', «а: //bott.com/xxxx ', (найти (' // ',' abc: //bott.com/xxxx ') +3)) -1)

возвращает это:

а: //bott.com

«отчетливого» заставит вас, чтобы получить только один из какого-либо результата (без спичек).

+0

, а если есть http: // впереди, она будет включать ее также правильно? – YelizavetaYR

+0

Да, он пропустит это и будет искать первый «/» после него. –

+0

Извините, я бы заменил 'abc: //bott.com/xxxx' на имя столбца? – YelizavetaYR

1

Вы ищете это:

SELECT SUBSTRING_INDEX('http://facebook.com/hello', '/', 3); 

=> "http://facebook.com" 
+0

во-первых, сво она. но во-вторых, для каждой строки в таблице URL-адрес отличается, а facebook - всего лишь пример. Мне нужно использовать/как точку отсечения, чтобы найти то, что мне нужно. – YelizavetaYR

+0

Ну его частично правильно, как насчет 'SELECT SUBSTRING_INDEX ('www.facebook.com/hello', '/', 3);'? то есть, если URL-адрес не имеет «http/s» и «www»? –

+0

@AbhikChakraborty команда выше будет работать для всех URL-адресов –

1

Вот один из способов сделать это при условии, что вы можете иметь http:// или https:// или просто www Идея заключается в том, чтобы сначала заменить // с другим характером говорят ||, а затем использовать substring_index для разбора строки до первого появления / и, наконец, заменить || с //

Вот некоторые примеры

mysql> select replace(substring_index(replace('http://facebook.com/hello','//','||'),'/',1),'||','//') as url; 
+---------------------+ 
| url     | 
+---------------------+ 
| http://facebook.com | 
+---------------------+ 


mysql> select replace(substring_index(replace('www.facebook.com/hello','//','||'),'/',1),'||','//') as url; 
+------------------+ 
| url    | 
+------------------+ 
| www.facebook.com | 
+------------------+ 



mysql> select replace(substring_index(replace('http://www.facebook.com/hello/a/b/c','//','||'),'/',1),'||','//') as url; 
+-------------------------+ 
| url      | 
+-------------------------+ 
| http://www.facebook.com | 
+-------------------------+ 

mysql> select replace(substring_index(replace('http://facebook.com/hello/a/b/c','//','||'),'/',1),'||','//') as url; 
+---------------------+ 
| url     | 
+---------------------+ 
| http://facebook.com | 
+---------------------+ 
+0

Что выглядит довольно круто, но я не хочу заменить, я просто хочу извлечь. вытащить корневой URL. – YelizavetaYR

+0

Замена заключается в том, чтобы заставить формулу работать так, чтобы она искала '/' с левой стороны, поскольку после первого '/' может быть много '/', поэтому мы не можем смотреть справа налево. Поэтому он должен дать вам то, что вам нужно. Точный URL-адрес до первого '/' без изменения чего-либо до этого :-) Я добавил еще несколько тестов в ответ. –

+0

, и если ссылка, которую вы получили, заменяется столбцом? если он все еще будет работать. (если в этом столбце есть весь URL-адрес) – YelizavetaYR

Смежные вопросы