晚上好,
我需要在SQL列( Column3 )中替换字符串“的”部分,我正在使用REPLACE内置函数来完成此操作,但我需要在原始字符串( Column2 )中添加一个前导数字( 1 ),并且我不断收到“字符串或二进制数据将被截断”。
UPDATE [database].[dbo].[Table1]
SET [Column3] = REPLACE(Column3, Column2, ('1' + Column2))
一个例子:
第2栏:“0200”
以下是COLUMN3字符串的示例:
第3栏:“测试数据0200”
然后在更换后我们需要像这样显示:“测试数据10200” 请注意,该号码现在包含一个前导“1”
请帮助!!!
答案 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)只运行一次字符串,并在替换后,从替换后继续,而不是从右下一个字符继续。