为此,您不需要 CLR 和 RegEx。
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?