2015-10-13 48 views
1

我必须进行sql查询,以改变第二次发生/和第三次发生特定文本之间的特定文本。因此,让我们采取例如低于我粗体其放置像上面提到的字符串:根据放置在特定位置的特定字符串更新的行

/伦 - RS7/TAMBURLAGER /RS7-TAMB-COVER-2/IMG_9140.JPG

/OHTER IO/MAN-SIX为56/MACHINE4/PIC 56.jpg

/伦 - RS7/Optislit格贝尔 /RS7-BARRIER-6/IMG_9141.JPG

/伦 - RS7/Optislit格贝尔 /R-BARRIER-6/IMG_33.JPG

/伦 - RS7/Optislit格贝尔 /RS7-BARRIER-7/IMG_9143.JPG

/汽车/ MaszynaAniaZawiera2/Elementzawiera1/IMG_0152 - Copy.JPG

/安内科斯基Supercalander 2014/SC4开卷操作 侧 /SC4-LF2/IMG_2486.JPG

/伦 - RS7/Optislit格贝尔 /RS7-BARRIER-6/IMG_9142.JPG

/伦 - RS7/Optislit格贝尔 /RS7-BARRIER-9/IMG_9148.JPG

/OHTER IO/MAN-SIX作为56 /MACHINE4/pic-11.jpg

/OHTER IO/MAN-SIX为56 /MACHINE1/pic3.jpg

/安内科斯基Supercalander 2014/Supercalander 4 d里沃 侧 /SC4-D-CL1/IMG_3769.JPG

/安内科斯基Supercalander 2014/Electriccabinets /EC1-1/IMG_2745.JPG

/安内科斯基Supercalander 2014/SC5Unwinder 驱动/SC5 -D-F1-SW1/IMG_5304.JPG

/Cars/MaszynaAniaZawiera2/Elementzawiera1/IMG_0148 - Copy。JPG

现在 - 让我们只发现那些我想这串 MAN-SIX为56,然后将其WHATEVER-11基础上提到的例子中,我们得到了

所以改为含有它的3行:

/OHTER IO/MAN-SIX为56/MACHINE4/PIC 56.jpg

/OHTER IO/MAN-SIX为56 /MACHINE4/pic-11.jpg

/OHTER IO/MAN-SIX为56 /MACHINE1/pic3.jpg

所以最后基于示例的那些行应改为:

/OHTER IO/WHATEVER-11/MACHINE4/PIC 56.jpg

/OHTER IO/WHATEVER-11 /MACHINE4/pic-11.jpg

/OHTER IO/WHATEVER-11/MACHINE1/PIC 3.JPG

如何实现对以安全因为我得到了数百万条记录,而且这必须足够安全,以至于不会触及别的应该是的东西?

在此先感谢。

进一步讨论:

select 
    stuff([PicturePath], charindex('/', [PicturePath], charindex('/', [PicturePath]) + 1) + 1, 13, 'WHATEVER-11') as new_data 
from [WojtGroup].[dbo].[tbElemPics] 
where substring([PicturePath], charindex('/', [PicturePath], charindex('/', [PicturePath]) + 1) + 1, 14) = 'MAN-SIX as 56/' 
+0

问题,是文字'''MAN-六个56'''总是第二间/和3 /? – mTorres

+0

如上所述 - 是的,我们正在寻找具体的文本,以便在第二次出现/第三次出现/ – Arie

+0

之间尝试使用:替换(col,'MAN-SIX为56','WHATEVER-11') –

回答

1

尝试这样,

DECLARE @string  VARCHAR(100)=N'/OHTER IO/MAN-SIX as 56/MACHINE4/pic 56', 
     @replacewith VARCHAR(100)=N'WHATEVER-11' 

SELECT Substring(@string, Charindex('/', @string, Charindex('/', @string)+1) 
          + 1, Charindex('/', @string, Charindex('/', @string, Charindex('/', @string)+1) 
                 + 1) - Charindex('/', @string, Charindex('/', @string) + 1) - 1) AS substring 
SELECT @string                             AS ActualData, 
     Stuff(@string, Charindex('/', @string, Charindex('/', @string)+1) 
         + 1, Charindex('/', @string, Charindex('/', @string, Charindex('/', @string)+1) 
                + 1) - Charindex('/', @string, Charindex('/', @string) + 1) - 1, @replacewith) AS ReplacedData 

准备尝试这种选择测试您的方案。

select Stuff(PicturePath, Charindex('/', PicturePath, Charindex('/', PicturePath)+1) 
             + 1, Charindex('/', PicturePath, Charindex('/', PicturePath, Charindex('/', PicturePath)+1) 
                     + 1) - Charindex('/', PicturePath, Charindex('/', PicturePath) + 1) - 1, 'WHATEVER-11') 
                     from tbElemPics 
WHERE Substring(PicturePath, Charindex('/', PicturePath, Charindex('/', PicturePath)+1) 
          + 1, Charindex('/', PicturePath, Charindex('/', PicturePath, Charindex('/', PicturePath)+1) 
                  + 1) - Charindex('/', PicturePath, Charindex('/', PicturePath) + 1) - 1) = 'MAN-SIX as 56'   

使用此更新语句

UPDATE tbElemPics 
SET PicturePath = Stuff(PicturePath, Charindex('/', PicturePath, Charindex('/', PicturePath)+1) 
             + 1, Charindex('/', PicturePath, Charindex('/', PicturePath, Charindex('/', PicturePath)+1) 
                     + 1) - Charindex('/', PicturePath, Charindex('/', PicturePath) + 1) - 1, 'WHATEVER-11') 
WHERE Substring(PicturePath, Charindex('/', PicturePath, Charindex('/', PicturePath)+1) 
          + 1, Charindex('/', PicturePath, Charindex('/', PicturePath, Charindex('/', PicturePath)+1) 
                  + 1) - Charindex('/', PicturePath, Charindex('/', PicturePath) + 1) - 1) = 'MAN-SIX as 56' 
+1

这是纯动态语句。请将此更改为select语句检查您的结果。一旦你对它有好处,然后运行更新。 – StackUser

+0

你可以改变你的选择,我可以再次使用它我的表被称为:[tbElemPics]和列名称是PicturePath – Arie

+1

请现在请参阅我更新的答案 – StackUser

1

您可以CHARINDEXSTUFF做到这一点;

Select语句sqlfiddle

select 
    stuff(data, charindex('/', data, charindex('/', data) + 1) + 1, 13, 'WHATEVER-11') as new_data 
from tbl 
where substring(data, charindex('/', data, charindex('/', data) + 1) + 1, 14) = 'MAN-SIX as 56/' 

update语句sqlfiddle

update tbl 
set data = stuff(data, charindex('/', data, charindex('/', data) + 1) + 1, 13, 'WHATEVER-11') 
where substring(data, charindex('/', data, charindex('/', data) + 1) + 1, 14) = 'MAN-SIX as 56/'