SQL новый столбец с сопоставлением с шаблоном - PullRequest
0 голосов
/ 07 ноября 2011

У меня есть столбец с URL-адресом, который выглядит следующим образом

http://www.somedomain.edu/rootsite1/something/something/ или http://www.somedomain.edu/sites/rootsite2/something/something

В основном я хочу ТОЛЬКО вернуть строку до корневого сайта (в другом столбце). Корневой сайт может быть любым (кроме / sites), но он будет либо следовать за / sites /, либо .edu /

, поэтому две приведенные выше строки вернутся:

http://www.somedomain.edu/rootsite1
http://www.somedomain.edu/sites/rootsite2

Я не могу скомпилировать представление с помощью CLR, поэтому я не думаю, что Regex - это вариант.

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 07 ноября 2011

Я думаю, что вы добьетесь большего успеха, разделив URL-адрес на стороне клиента и сохранив его как две части в таблице (один содержит «корневой» сайт, другой - путь к сайту), а затем поместите их снова вместе на стороне клиента после поиска.

Если вы решили сохранить их в таблице, как описано выше, вы можете использовать CHARINDEX, чтобы определить, где .edu или /sites/ встречается в строке, а затем использовать SUBSTRING, чтобы разбить ее на основе этот индекс.

Если вам действительно нужно это сделать, вот пример:

declare @sites table (URL varchar(500))

insert into @sites
values
('http://www.somedomain.edu/rootsite1/something/something/'),
('http://www.somedomain.edu/sites/rootsite2/something/something')

select
    URL,
    SUBSTRING(URL, 1, case when charindex('/sites/', URL) > 0 then 
        charindex('/', URL, charindex('/sites/', URL) + 7) else 
        charindex('/', URL, charindex('.edu/', URL) + 5) end - 1)

from @sites
0 голосов
/ 07 ноября 2011

вы можете использовать CHARINDEX, LEN и SUBSTRING, чтобы сделать это, хотя я не уверен, что sql - это лучшее место, чтобы сделать это

DECLARE @testStr VARCHAR(255)
SET @testStr = 'http://www.somedomain.edu/rootsite1/something/something/'

PRINT SUBSTRING(@testStr, 0, CHARINDEX('.edu', @testStr))

Не полное решение, но вам нужно начать

...