我在SQL Server 2005数据库中有包含以下内容的记录:
longlongLongText###abcdefg###longlongLongText
(每个记录中可以是不同的字母,可能或多或少是字母。模式### abcdefg ###将是长字符串的一部分。)
我想更新记录,所以我只保留前3个字母。结果将是
longlongLongText###abc###longlongLongText
有可能吗?
感谢。
答案 0 :(得分:2)
这应该有效:
Update YourTable
Set YourField = left(YourField,CHARINDEX('###', YourField)-1) + substring(YourField, CHARINDEX('###', YourField),6) + right(YourField, len(YourField) - CHARINDEX('###', YourField) - 8)
where CHARINDEX('###', YourField)>0
- 左侧函数将返回长字符串的左侧部分,直到达到“###”
- substring函数将返回从第一个'###'开始并包含前3个字符的子字符串。
- 右边的函数将从第二个'###'
开始返回正确的子字符串您可以在此处试用:Fiddle
答案 1 :(得分:1)
这样做你想要的吗?
select left(str, 6) + '###'
或者:
select '###' + left(replace(str, '#', ''), 3) + '###'
如果中间只有一个或两个字母,这样会更好。
答案 2 :(得分:0)
创建如下的简单函数:
create function fnReplaceByPattern(@s varchar(max)) returns varchar(max)
begin
declare @pos int = 1;
declare @len int = len(@s);
declare @result varchar(max) = '';
while @pos < @len
begin
declare @start int = charindex('###', @s, @pos);
declare @end int = charindex('###', @s, @start + 3);
if @start != 0 and @end != 0
begin
set @result += substring(@s, @pos, @start - @pos + 6) + '###';
set @pos = @end + 3;
end
else
begin
set @result += substring(@s, @pos, @len - @pos + 1);
set @pos = @len;
end
end
return @result
end
然后使用update T1 set Data = dbo.fnReplaceByPattern(Data)
答案 3 :(得分:0)
试试这个:
替换&#34; col1&#34;使用您的列名。
update yourtable
SET col1 = substring(col1,0,charindex('###',col1)-1)+substring(col1,charindex('###',col1),6)+ substring(col1,CHARINDEX('###',col1,(charindex('###',col1)+1)), (len(col1)-CHARINDEX('###',col1,(charindex('###',col1)))))
here你可以看到并测试
希望这个帮助