SQL заменить все символы между двумя строками - PullRequest
1 голос
/ 13 января 2012

Я пытаюсь найти способ обновить / заменить только текст между двумя строками.

Например, мне нужно иметь возможность обновлять поле и заменять только то, что находится между следующими тегами сценария, оставляя текст до того, как открывающий тег сценария остается неизменным.не будет работать, так как текст между тегами скрипта будет меняться.Есть ли какой-то подстановочный знак?

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 Это работает, но не заменяет закрывающий тег </script>.Я в конечном итоге с этим.

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

Как мы также удаляем закрывающий тег 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 ]

5 голосов
/ 13 января 2012
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')
2 голосов
/ 13 января 2012

Возможно, это не лучшее решение, но ...

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
...