替换SQL中的特定字符串

时间:2011-10-04 15:24:41

标签: html sql sql-server regex

我们有一个包含HTML标记的MS SQL数据库。但是,我们需要经常更改顶部的CSS声明。有没有办法编写一个SQL查询,可以让我们轻松替换标签之间的所有内容?例如:

replace '<style>OLDSTYLES</style>' with '<style>NEWSTYLES</style>'

更具体地说 - 我们可以使用动态变量代替“OLDSTYLES”,这样我们就不必每次都复制+粘贴旧的CSS吗?

4 个答案:

答案 0 :(得分:2)

如果HTML标记是格式良好的XML并且您熟悉XPath,那么您可以尝试以下解决方案。它应该适用于您指定的情况(样式标记),但是如果您需要修改另一个标记,则需要相应地更改XPath表达式,这里是“(/ html / style / text())[1]”。有关详细信息:XML data modification with XQuery at MSDN

-- sample data
declare @data table
(
    html xml
)
insert into @data select '<html><style>oldstyle</style><body></body></html>'

-- solution
declare @replacement varchar(50)
set @replacement = 'newstyle'

update @data
set html.modify('replace value of (/html/style/text())[1] with sql:variable("@replacement")')

select * from @data

答案 1 :(得分:1)

这应该可以正常工作,它可能需要一些调整,但它可以解决问题:

DECLARE
    @markup NVARCHAR(MAX)
    ,@OldStyles NVARCHAR(MAX)
    ,@NewStyles NVARCHAR(MAX)
    ,@PatIndex INT

SELECT @markup = '<style>OLDSTYLES</style>'
       ,@OldStyles = 'OLDSTYLES'
       ,@NewStyles = 'NewStyles'

SET @PatIndex = PATINDEX('%<style>%',@markup)

IF @PatIndex > 0
SET @markup = REPLACE(@markup,@OldStyles,@NewStyles)

SELECT @markup

答案 2 :(得分:0)

不要硬编码(内联)样式。使用样式表和类名。

答案 3 :(得分:0)

您要做的是link to an external stylesheet

如果这不起作用,那么在那里放置某种键串(例如“OLDSTYLES”),并在之后将替换为从数据库中取出html。