2015-12-09 2 views
0

У меня есть некоторые данные моего SQL Server 2012 в столбце comments типа данных nvarchar(max).Как заменить текст URL в <a href> .. string?

Образец данных:

For more information, please visit www.sample.com 
If you desire submit a request please go here: www.request.com 
Customer Service. 

Мне нужно, чтобы получить это:

For more information, please visit <a href="www.sample.com">www.sample.com</a> 
If you desire submit a request please go here: <a href="www.request.com">www.request.com</a> 
Customer Service." 

Все ссылки начинаются с www. Спасибо за вашу помощь

+0

Что необходимо сделать это, используя только SQL? Его можно легко достичь с помощью любого языка программирования, такого как C#, Java и т. Д. Я могу дать вам решение C#. –

+1

@ henpat- Вы хотите контролировать html в строке sql? –

+2

Итак, вы можете использовать некоторую проверку регулярных выражений, если «слово» начинается с www и продолжается словами или цифрами и точкой и заканчивается двумя-тремя или четырьмя буквами. Я думаю, что регулярное выражение - это то, что вам следует исследовать. – Trond

ответ

0

Вы можете создать такую ​​функцию, принимая в исходной строке, а затем возвращает результат ж/HTML:

CREATE FUNCTION dbo.ufnUrlHref (
    @str nvarchar(max) 
) 

RETURNS nvarchar(max) 
AS 
BEGIN 

DECLARE @nextMatch int = patindex('%www.%', @str); --find start of next 'www.' 
DECLARE @result nvarchar(max) = ''; 

WHILE (@nextMatch != 0) 
BEGIN 
    DECLARE @matchEnd int = charindex(' ', @str, @nextMatch); 
    DECLARE @strLen int = len(@str); 
    DECLARE @first nvarchar(max) = substring(@str, 1, @strLen - (@strLen - @matchEnd)); --get all of string up to first url 
    DECLARE @last nvarchar(max) = substring(@str, @matchEnd + 1, @strLen - @matchEnd); --get rest of string after first url 
    DECLARE @url nvarchar(255) = substring(@str, @nextMatch, @matchEnd - @nextMatch); --get url 
    SET @first = replace(@first, @url, '<a href="' + @url + '">' + @url + '</a>'); --replace url w/ full href 
    SET @result = @result + @first; --add updated string to result 

    --set up for next run 
    SET @str = @last; --remove corrected section from string 
    SET @nextMatch = patindex('%www.%', @str); --find start of next 'www.' 
END --end while 

IF @str IS NOT NULL --add any remaining text back into result 
BEGIN 
    SET @result = @result + @str; 
END 

RETURN @result; 

END; 
Смежные вопросы