T-SQL字符串替换

时间:2010-02-16 22:06:21

标签: sql sql-server database tsql

我需要替换标记{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 ...

处剪切网址字符串

我做错了什么?

3 个答案:

答案 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))