Я пытаюсь выделить только часть строки 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
Подстановочный знак для этого %//%/%
%//%/%
Iхочу только выбрать% // % /% (выделено жирным шрифтом).Это необходимо сделать для любого URL в том же формате.
Как я могу использовать для этого подстроку, заменить, charindex?
Или есть альтернативные способы сделать это?
Решение:
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