2013-08-28 46 views
0

我必須使用正則表達式從URL獲取主機名&路徑名。SQL SERVER獲取主機名和路徑但不包含參數

URL可在

一個)http://test.com/mary/archive/project.aspx形式 - >我想http::/test.com/mary
b)中http://www.testmary.com/company - >我想http://www.testmary.com/
c)中http://marytest.com/b/about/ - >我想http://marytest.com/
d) http://mary.test.com/b/mary/project.aspx - >我想http://mary.test.com/b/mary/

基本上我期待得到具有url「mary」的記錄,並根據「mary」的位置獲取唯一的主機名或路徑名。

任何幫助表示讚賞。

感謝 [R

+0

因爲我正在尋找「瑪麗」,並停止搜索,直到我找到最後一個 – user2726975

回答

2

你不需要CLR和正則表達式這一點。

DECLARE @x TABLE(id INT, url VARCHAR(2048)); 

INSERT @x VALUES 
(1,'http://test.com/mary/archive/project.aspx'), 
    --> I want http::/test.com/mary 
(2,'http://www.testmary.com/company'), 
    --> I want http://www.testmary.com/ 
(3,'http://marytest.com/b/about/'), 
    --> I want http://marytest.com/ 
(4,'http://mary.test.com/b/mary/project.aspx'), 
    --> I want http://mary.test.com/b/mary/ 
(5,'mary.test.com'); 
    --> I want mary.test.com 

SELECT ID, 
    [output] = SUBSTRING(url, 1, LEN(url) - CHARINDEX('yram', REVERSE(url)) 
    + COALESCE(NULLIF(CHARINDEX('/', SUBSTRING(url, LEN(url) - CHARINDEX('yram', 
     REVERSE(url)) + 1, 2048)),0),2048)) 
FROM @x 
WHERE url LIKE '%mary%'; 

結果:

ID output 
-- -------------------------------- 
1 http://test.com/mary/ 
2 http://www.testmary.com/ 
3 http://marytest.com/ 
4 http://mary.test.com/b/mary/ 
5 mary.test.com 

我不明白的唯一的事情就是在輸出的第一行應該缺少結尾的斜線,而其它行包括它。在我的查詢中,這個尾部的斜線包含在所有行中。如果不應該只包含在這一行中,則需要解釋原因。

儘管如此,我建議您更好地處理數據清理。爲什麼你會允許一些沒有http://前綴的URL?

+0

@ user2726975你有沒有包括在問題中的邊緣案例?你爲什麼不把它包含在問題中? –

+0

如果輸入的格式爲http://mary.test.com – user2726975

+0

,這將無法正常工作我有一張擁有數百萬條記錄的表格,並且我正在嘗試獲取所有角落案例,以便覆蓋所有內容。當我今天跑它,這一個沒有工作.. – user2726975