用户SQLServer 2005 以下是我遇到的字符串示例:{\ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang1033 {\ fonttbl {\ f0 \ fnil \ fcharset0 Arial Rounded MT Bold;} {\ f1 \ fnil \ fcharset0 Arial;}} \ viewkind4 \ uc1 \ pard \ f0 \ fs54 1000 \ f1 \ fs20 \ par}
我想用'Times New Roman'替换任何字体名称
我可以得到第一个(textlong1是字段):
Select Replace(textlong1,
CASE When CharIndex(';',textlong1)> 10 Then
SubString(textlong1
, Charindex('fcharset',textlong1)+10
, CharIndex(';',textlong1) - Charindex('fcharset',textlong1)-10)
Else '' End
, 'Times New Roman') From exampletable
我正在使用case语句来防止SubString出错。
由于我没有替换'fcharset',即使我循环,它也找不到第二个实例(总是卡在第一个实例上)。
答案 0 :(得分:2)
如果您可以集成.NET CLR功能(MSDN有很多示例),您可以使用正则表达式替换并使您的任务变得非常简单。
答案 1 :(得分:1)
如果你可以更换第一个,只需继续更换,直到没有第一个。如果您正在进行更新:
declare @done bit
while @done <> 1
begin
UPDATE ...
if @@rowcount = 0 set done = 1
end
或选择新变量:
declare @cur varchar(4000)
declare @next varchar(4000)
set @cur = 'The string to operate on'
set @next = ''
while @cur <> @next
begin
set @next = @cur
select @cur = REPLACE(@next,...)
end
最终结果现在存储在@cur(和@next中)。
答案 2 :(得分:0)
您总是可以使用分隔符程序来破坏字体列表实例周围的字符串,并用新罗马字符替换它们。