Замена строки T-SQL - PullRequest
       37

Замена строки T-SQL

6 голосов
/ 17 февраля 2010

Мне нужно заменить тег {URL}:

DECLARE @PageUrl varchar(200)
DECLARE @Body varchar(MAX)

SET @PageUrl = 'http://www.website.com/site1/site2/pageName.asxp?rid=1232'
SET @Body = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus, 
{URL} enim nec posuere volutpat, neque dui volutpat turpis. '

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar,@PageUrl))
PRINT @Body

Мой ожидаемый результат:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus,
http://www.website.com/site1/site2/pageName.asxp?rid=1232 enim nec posuere volutpat, neque dui volutpat turpis.

И результат печати:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus,
http://www.website.com/site1/s enim nec posuere volutpat, neque dui volutpat turpis.

Как вы можете видеть, функция replace обрезает строку URL в 31 ...

Что я делаю не так?

Ответы [ 3 ]

12 голосов
/ 17 февраля 2010

Проблема не в методе replace, а в методе convert.

Вам нужно либо указать длину преобразованного типа

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar(200),@PageUrl))

или поскольку он уже определен как varchar, просто используйте переменную ..

SET @Body = REPLACE(@Body,'{Url}', @PageUrl)

Если вы посмотрите на страницу char / vachrar

Когда n не указано в данных определение или объявление переменной утверждение, длина по умолчанию равна 1. Когда n не указано при использовании Функции CAST и CONVERT, длина по умолчанию 30 .

2 голосов
/ 17 февраля 2010

Вы не указываете длину varchar:

CONVERT(varchar,@PageUrl)

угадайте, какое значение по умолчанию? 30, как вы говорите в вопросе (отсутствует 31-й символ до конца)

используйте это так:

CONVERT(varchar(200),@PageUrl)

чтобы получить все символы

1 голос
/ 17 февраля 2010

На этой линии оно отрезано:

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar,@PageUrl)) 

Используйте это:

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar(200),@PageUrl)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...