T-SQL字符串替换

pau*_*au. 7 sql t-sql database sql-server

我需要替换标记{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
Run Code Online (Sandbox Code Playgroud)

我的预期结果是:

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.
Run Code Online (Sandbox Code Playgroud)

打印结果如下:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus,
http://www.website.com/site1/s enim nec posuere volutpat, neque dui volutpat turpis.
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,替换功能会切断其31位的网址字符串...

我做错了什么?

Gab*_*oli 12

问题不在于replace方法,而是convert方法..

您需要指定转换类型的长度

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar(200),@PageUrl))
Run Code Online (Sandbox Code Playgroud)

或者因为它已经被定义为varchar,所以只需使用变量..

SET @Body = REPLACE(@Body,'{Url}', @PageUrl)
Run Code Online (Sandbox Code Playgroud)

如果你看一下char/vachrar页面

如果未在数据定义或变量声明语句中指定n,则默认长度为1.如果在使用CAST和CONVERT函数时未指定n,则默认长度为30.