2014-11-20 37 views
0

我有兩個問題 給定一個稱爲URL(在鏈接表中)的列,其中包含url的示例。SQL子串代碼

之類的東西http://facebook.com/hello我需要提取的一切,直到第一/所以http://facebook.comhttps://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

選擇SUBSTR(URL,1,定位( '/',網址,(找到( '//',URL)+3)) - 1 )從...

例如這樣的:

選擇SUBSTR( 'ABC://bott.com/xxxx',1,定位( '/',「ABC://bott.com/xxxx ',(locate('//','abc://bott.com/xxxx')+3))-1)

返回:

ABC://bott.com

的「獨特」將使你得到的只有任何結果的一個(不匹配)。

+0

,如果前面有一個http://它將包含它也是正確的? – YelizavetaYR 2014-11-20 18:09:30

+0

是的,它會跳過它並尋找它後面的第一個'/'。 – 2014-11-20 19:15:09

+0

對不起,我會用列名取代'abc://bott.com/xxxx'? – YelizavetaYR 2014-11-20 20:34:16

1

你在找這樣的:

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

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

首先它是一個她。但其次URL在表中的每一行都不相同,facebook只是一個例子。我需要使用/作爲切入點來找到我需要的東西。 – YelizavetaYR 2014-11-20 18:02:10

+0

那麼它的部分正確的怎麼樣'SELECT SUBSTRING_INDEX('www.facebook.com/hello','/',3);'?即如果URL沒有'http/s'和'www'來代替? – 2014-11-20 18:06:04

+0

@AbhikChakraborty上面的命令將適用於所有的URL類型 – 2014-11-20 20:05:38

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

很酷,但我不'想要取代我只是想提取。拔出根網址。 – YelizavetaYR 2014-11-20 18:18:02

+0

替換隻是爲了使公式工作,以便它從左側搜索'/',因爲在第一個'/'之後可能會有很多'/',所以我們不能從右向左看。所以它應該給你你需要的東西。直到第一個'/'的確切網址沒有改變任何東西之前:-)我在答案中增加了更多的測試。 – 2014-11-20 18:20:57

+0

,如果你的鏈接被一列替換?如果它仍然有效。 (如果該列中包含整個網址) – YelizavetaYR 2014-11-20 18:22:26