我需要替换标记{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.
正如您所看到的,替换功能会在其31 ...
处剪切网址字符串我做错了什么?
答案 0 :(得分:12)
问题不在于replace
方法,而在于convert
方法..
您需要指定转换后的类型的长度
SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar(200),@PageUrl))
或者因为它已经被定义为varchar,所以只需使用变量..
SET @Body = REPLACE(@Body,'{Url}', @PageUrl)
如果您查看char/vachrar page
在数据中未指定n时 定义或变量声明 声明,默认长度为1。 使用时未指定n时 CAST和CONVERT函数, 默认长度 30 。
答案 1 :(得分:2)
您没有指定varchar长度:
CONVERT(varchar,@PageUrl)
猜猜默认是什么? 30,就像你在问题中说的那样(到最后的第31个字符缺失)
像这样使用它:
CONVERT(varchar(200),@PageUrl)
获取所有角色
答案 2 :(得分:1)
这条线正在切断:
SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar,@PageUrl))
使用此:
SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar(200),@PageUrl))