如何使用SQL替换特定URL下的内容?

时间:2015-10-26 08:09:08

标签: sql sql-server dotnetnuke

我有关于在SQl中更新和替换内容的问题。

假设我有数据库名称AXY,在AXY数据库中我有Tables文件夹,在Tables文件夹下我有.dbo.TabUrls。

以下是我如何替换我的内容:

UPDATE AXY..HtmlText
SET Content = REPLACE(CAST(Content AS NVARCHAR(MAX)), 'OLDCONTENT', 'NEWCONTENT')  
WHERE Content LIKE '%OLDCONTENT%'

.dbo.TabUrls有[url]字段,用于存储所有网址。 我想仅在页面中使用[Url] ='/ flupke /%'

更改内容

我必须运行什么查询?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个

DECLARE @T TABLE(CONTENT VARCHAR(100))
INSERT INTO @T VALUES 
('http://stackoverflow.com/questions/33341107/flupke/somethnigelse')
,('http://stackoverflow.com/questions/33341107/flupke123/somethnigelse')
,('http://stackoverflow.com/questions/33341107/somethingflupke/somethnigelse')
,('http://stackoverflow.com/questions/33341107/nothing/somethnigelse')
,('http://stackoverflow.com/flupke/33341107/flupke/somethnigelse')

DECLARE @PATTERN_TO_FIND  VARCHAR(20) = '%flupke%'
DECLARE @NEW_CONTENT VARCHAR(20) = 'NewContent'

SELECT 
    CONTENT
    ,IsMatch = PATINDEX(@PATTERN_TO_FIND,CONTENT)
    ,ToReplace = SUBSTRING(SUBSTRING(CONTENT, PATINDEX(@PATTERN_TO_FIND, CONTENT),LEN(CONTENT)),1,PATINDEX('%/%',SUBSTRING(CONTENT, PATINDEX(@PATTERN_TO_FIND, CONTENT),LEN(CONTENT)))-1)
    ,ReplacedContent = 

    CASE WHEN PATINDEX(@PATTERN_TO_FIND,CONTENT) > 0 
         THEN REPLACE(CONTENT,SUBSTRING(SUBSTRING(CONTENT, PATINDEX(@PATTERN_TO_FIND, CONTENT),LEN(CONTENT)),1,PATINDEX('%/%',SUBSTRING(CONTENT, PATINDEX(@PATTERN_TO_FIND, CONTENT),LEN(CONTENT)))-1),@NEW_CONTENT)
         ELSE CONTENT
    END
FROM @T

enter image description here

正如可以看出的那样,只有那些网址在哪里'%flupke%'正在被取代。 所以,在我看来,REPLACE函数应该是

REPLACE(CONTENT,SUBSTRING(SUBSTRING(CONTENT, PATINDEX(@PATTERN_TO_FIND, CONTENT),LEN(CONTENT)),1,PATINDEX('%/%',SUBSTRING(CONTENT, PATINDEX(@PATTERN_TO_FIND, CONTENT),LEN(CONTENT)))-1),@NEW_CONTENT) 

您的更新查询应为

UPDATE AXY..HtmlText
SET Content = REPLACE(CONTENT,SUBSTRING(SUBSTRING(CONTENT, PATINDEX(@PATTERN_TO_FIND, CONTENT),LEN(CONTENT)),1,PATINDEX('%/%',SUBSTRING(CONTENT, PATINDEX(@PATTERN_TO_FIND, CONTENT),LEN(CONTENT)))-1),@NEW_CONTENT) 
WHERE PATINDEX(@PATTERN_TO_FIND,CONTENT) > 0

如果查询符合我对您的问题的理解,请告诉我。

由于

答案 1 :(得分:0)

UPDATE AXY.dbo.TabUrls 
SET Content = 'NEWCONTENT' 
WHERE Content LIKE '%OLDCONTENT%' 
AND URL LIKE '/flupke/%'