我正在尝试仅使用通配符选择URL字符串的一部分。
示例:
https://www.google.com.au/search?rlz=1C1GGRV_enAU787AU788&ei=9N6_W5o5w-b4BrKTvsgE&q=stackoverflow&oq=stackoverflow&gs_l=psy-ab.3..0i131i67k1j0l4j0i10k1j0l4.427511.429162.0.429260.13.8.0.0.0.0.314.525.2-1j1.2.0....0...1.1.64.psy-ab..11.2.524....0.NEXVTCFK4GA
通配符为%//%/%
我只想选择%// % /%(粗体部分)。对于任何给定格式相同的URL,都需要这样做。
如何使用子字符串,替换,charindex来做到这一点?
还是有其他替代方法?
答案 0 :(得分:1)
解决方案:
DECLARE @urls TABLE (urlId INT IDENTITY, urlText VARCHAR(500) NOT NULL);
INSERT @urls(urlText)
VALUES
('https://www.amazon.com/SQL-Server-MVP-Deep-Dives/dp/1617290475'),
('http://sqlblog.com/blogs/rob_farley/archive/2011/11/08/when-is-a-sql-function-not-a-function.aspx'),
('http://sqlblogcasts.com/blogs/simons/archive/2015/04/26/non-parallelizable-operations-in-sql-server.aspx'),
('http://www.sqlinthewild.co.za/index.php/2009/04/29/functions-io-statistics-and-the-execution-plan/'),
('https://www.brentozar.com/archive/2014/10/sql-server-functions-dragging-query/');
SELECT urlId = u.urlId,
urlText = u.urlText,
[url] = SUBSTRING(u.urlText,front.pos,txt.ln)
FROM @urls AS u
CROSS APPLY (VALUES(CHARINDEX('//',u.urlText)+2)) AS front(pos)
CROSS APPLY (VALUES(CHARINDEX('/',u.urlText,front.pos)-front.pos)) AS txt(ln);
结果:
urlId urlText url
------- ------------------------------------------------------- ---------------------
1 https://www.amazon.com/SQL-Server-MVP-Deep-Dives/dp... www.amazon.com
2 http://sqlblog.com/blogs/rob_farley/archive/2011/11... sqlblog.com
3 http://sqlblogcasts.com/blogs/simons/archive/2015/0... sqlblogcasts.com
4 http://www.sqlinthewild.co.za/index.php/2009/04/29/... www.sqlinthewild.co.za
5 https://www.brentozar.com/archive/2014/10/sql-serve... www.brentozar.com