SQL:在REPLACING字符串时添加数字

时间:2014-11-14 02:48:28

标签: sql-server

晚上好,

我需要在SQL列( Column3 )中替换字符串“的”部分,我正在使用REPLACE内置函数来完成此操作,但我需要在原始字符串( Column2 )中添加一个前导数字( 1 ),并且我不断收到“字符串或二进制数据将被截断”。

UPDATE [database].[dbo].[Table1]
SET [Column3] = REPLACE(Column3, Column2, ('1' + Column2)) 

一个例子:

第2栏:“0200”

以下是COLUMN3字符串的示例:

第3栏:“测试数据0200”

然后在更换后我们需要像这样显示:“测试数据10200” 请注意,该号码现在包含一个前导“1”

请帮助!!!

2 个答案:

答案 0 :(得分:0)

您收到的错误消息表明结果字符串太大而无法容纳在"数据"柱。你需要增加"数据"的大小。确保结果合适。

尝试运行此SELECT(而不是UPDATE)来查看正在发生的事情

SELECT
  REPLACE(Column3, Column2, ('1' + Column2)) AS Result,
  DATALENGTH(REPLACE(Column3, Column2, ('1' + Column2))) AS ResultSize
FROM
  [database].[dbo].[Table1]

答案 1 :(得分:0)

也许这个REPLACE函数在递归循环中替换,直到它吹掉字符串的大小。假设Column3是varchar(10),并包含“abcd”。 Column2包含“b”。然后,它将替换Column3中所有出现的Column2为'1'+ Column2。

首次替换('b'代表'1b'):

"a1bcd"

第二次替换:

"a11bcd"

它继续......

"a111bcd"
"a1111bcd"
"a11111bcd"
"a111111bcd"

下次它会尝试在varchar(10)上放一个11个字符的字符串。

你应该定义你自己的函数(使用T-SQL)只运行一次字符串,并在替换后,从替换后继续,而不是从右下一个字符继续。