你不需要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?
因爲我正在尋找「瑪麗」,並停止搜索,直到我找到最後一個 – user2726975