sql替换两个字符串之间的所有字符

时间:2012-01-13 12:46:55

标签: sql sql-server sql-server-2000

我试图找出一种方法来更新/替换两个字符串之间的文本。

例如,我需要能够更新字段并仅替换以下脚本标记之间的内容,而不会触及打开脚本标记之前的文本。

I want to keep this string<script type="text/javascript" language="javascript">********</script>

我认为REPLACE不起作用,因为脚本标记之间的文本会有所不同。是否有某种类型的通配符?

UPDATE Products_Joined 
SET TechSpecs = REPLACE (CAST(TechSpecs AS NVARCHAR(MAX)), '<script type="text/javascript" language="javascript">********</script>', '<script type="text/javascript" language="javascript">new text</script>' )

更新:使用@Parkyprg answer这有效,但不会替换结束</script>标记。 我最终得到了这个。

I want to keep this string new text</script>

我们如何删除结束脚本标记?

UPDATE Products_Joined
SET TechSpecs = REPLACE(CAST(TechSpecs AS NVARCHAR(MAX)), 
SUBSTRING(CAST(TechSpecs AS NVARCHAR(MAX)),
CHARINDEX('<script type="text/javascript" language="javascript">',TechSpecs),
CHARINDEX('</script>',CAST(TechSpecs AS NVARCHAR(MAX))) - 
CHARINDEX('<script type="text/javascript" language="javascript">',TechSpecs)
),' new text') 

2 个答案:

答案 0 :(得分:5)

DECLARE @OpenTag varchar(100)
SET @OpenTag = '<script type="text/javascript" language="javascript">'

UPDATE Products_Joined
SET TechSpecs  = STUFF(TechSpecs ,
                       CHARINDEX(@OpenTag, TechSpecs ,1)  + LEN(@OpenTag),
                            CHARINDEX('</script>',TechSpecs ,1)-(CHARINDEX(@OpenTag, TechSpecs ,1)  + LEN(@OpenTag)), 
                       'New Text')

答案 1 :(得分:2)

这可能不是最好的解决方案,但是......

UPDATE Products_Joined
SET TechSpecs = REPLACE(TechSpecs, 
SUBSTRING(TechSpecs,
  CHARINDEX('<script type="text/javascript" language="javascript">',TechSpecs),
  CHARINDEX('</script>',TechSpecs) - 
  CHARINDEX('<script type="text/javascript" language="javascript">',TechSpecs)
)
FROM MyTable