2010-02-16 22 views
5

tôi cần phải thay thế các thẻ {URL}:T-SQL Chuỗi Thay

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 

kết quả mong đợi của tôi là:

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. 

Và kết quả in là:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed luctus, 
http://www.website.com/site1/s enim nec posuere volutpat, neque dui volutpat turpis. 

Như bạn có thể thấy chức năng thay thế cắt chuỗi url tại 31 của nó ...

Tôi đang làm gì sai?

Trả lời

10

Vấn đề là không phải là phương pháp replace, nó là phương pháp convert ..

Bạn cần để chỉ định độ dài của loại được chuyển đổi

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar(200),@PageUrl)) 

hay vì nó đã được định nghĩa là một varchar chỉ cần sử dụng biến ..

SET @Body = REPLACE(@Body,'{Url}', @PageUrl) 

Nếu bạn có một cái nhìn tại char/vachrar page

Khi số lượng không được quy định trong một dữ liệu định nghĩa hoặc tuyên bố biến số , độ dài mặc định là 1. Khi n không được chỉ định khi sử dụng các hàm CAST và CONVERT , thì chiều dài mặc định là là .

+0

Tốt điểm rằng sự chuyển đổi không phải là thậm chí cần thiết, +1. – rosscj2533

1

Nó bị cắt đứt tại dòng này:

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar,@PageUrl)) 

Sử dụng này:

SET @Body = REPLACE(@Body,'{Url}', CONVERT(varchar(200),@PageUrl)) 
2

Bạn không chỉ định một chiều dài varchar:

CONVERT(varchar,@PageUrl) 

đoán những gì mặc định là? 30, giống như bạn nói trong câu hỏi (các char 31 đến cuối cùng là mất tích)

sử dụng nó như thế này:

CONVERT(varchar(200),@PageUrl) 

để có được tất cả các nhân vật

Các vấn đề liên quan