2015-03-20 4 views
0

Недавно я узнал, что мои ссылки, хранящиеся в базе данных, не открываются на новых вкладках (нет target="_blank"). Я сделал этот скрипт, который добавляет его.SQL Server: индекс нескольких символов

Моя проблема в том, что если столбец Preamble имеет несколько ссылок, только первый будет обновлен с помощью target="_blank", как я могу запустить это для всех ссылок в столбце?

SELECT 
    STUFF(Preamble, CHARINDEX('>', Preamble, PATINDEX('%<a href%', Preamble)) - 1, 1, '" target="_blank"') 
FROM 
    QuestionContainer 
WHERE 
    Preamble LIKE '%<a href%' 

В колонке «Преамбула» содержится другая разметка HTML и другой текст.

Update

Так почему я пытался добавить target="_blank" к концу тега привязки, вместо этого я могу просто добавить его в начале.
Простой REPLACE(Preamble, '%<a href%', '<a target="_blank" href') поразит все вхождения подряд и решит мою проблему. - Спасибо Аллан С. Хансен

+1

Будет что-то вроде 'обновления questioncontainer набора преамбулы = заменить (преамбула, '

+0

This. But only if none of them have it, otherwise you would have to exclude the ones containing "_blank". –

ответ

1

Попробуйте с REPLACE функции:

DECLARE @s NVARCHAR(MAX) = '<a href="some1"><a href="some2">' 
SELECT REPLACE(@s, '>', ' target="_blank">') AS Link 

Выход:

Link 
<a href="some1" target="_blank"><a href="some2" target="_blank"> 

Применить к выписке:

SELECT REPLACE(Preamble, '>', ' target="_blank">') 
FROM QuestionContainer 
WHERE Preamble like '%<a href%' 

EDIT, согласно @Allan комментарий :

DECLARE @s NVARCHAR(MAX) = '<a href="some1"></a><a href="some2"></a>' 
SELECT REPLACE(REPLACE(@s, '>', ' target="_blank">'), '</a target="_blank">', '</a>') AS Link 

EDIT 2: если у вас есть другой тип тегов, то это имеет смысл поместить строку замены в beginnning:

DECLARE @s NVARCHAR(MAX) = '<a href="some1"></a><a href="some2"></a><b>' 
SELECT REPLACE(@s, '<a ', '<a target="_blank" ') AS Link 

Выход:

Link 
<a target="_blank" href="some1"></a><a target="_blank" href="some2"></a><b> 
+3

hyperlinks often end with a –

+0

@ AllanS.Hansen, спасибо. Я отредактировал ответ. –

+0

@GiorgiNakeuri Это имеет смысл, но у меня есть ~ 100 строк, мне все равно придется копировать вставки ссылок в DECLARE, чего я хочу избежать. – Mathemats

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