簡體   English   中英

T-SQL字符串替換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM