[英]T-SQL String Replace
我需要替換標記{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位的網址字符串...
我做錯了什么?
問題不在於replace
方法,而是convert
方法..
您需要指定轉換類型的長度
SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar(200),@PageUrl))
或者因為它已經被定義為varchar,所以只需使用變量..
SET @Body = REPLACE(@Body,'{Url}', @PageUrl)
如果你看一下char / vachrar頁面
如果未在數據定義或變量聲明語句中指定n,則默認長度為1.如果在使用CAST和CONVERT函數時未指定n,則默認長度為30 。
您沒有指定varchar長度:
CONVERT(varchar,@PageUrl)
猜猜看默認是什么? 30,就像你在問題中說的那樣(最后的第31個字符丟失了)
像這樣用它:
CONVERT(varchar(200),@PageUrl)
獲得所有角色
它在這條線上被切斷了:
SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar,@PageUrl))
用這個:
SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar(200),@PageUrl))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.