SQL:有没有办法在SQL中执行质量字符串替换?

时间:2018-08-27 20:48:55

标签: sql sql-server database string replace

我有一些数据需要在我的数据库中重写。 我正在尝试将完整的网址转换为相对网址。所以基本上我需要去更改所有“ https://www.website.com/uploads/images/1dhe5d5B56.jpg”的出现 更像是“ uploads / images / 1dhe5d5B56.jpg”。

我知道有replace(),但不确定是否可以将其用于更新而不是选择。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

是的,您可以将REPLACEUPDATE结合使用:

UPDATE tab
SET col = REPLACE(REPLACE(col,'https://www.website.com/uploads/images','|place|')
           ,'|place|', 'uploads/images')
WHERE col LIKE '%https://www.website.com/uploads/images/%';

Rextester Demo

标准Replace([ColumWithUrl], 'https://www.website.com/', '')可能会替换过多的值,例如https://www.website.com/index.html

针对:

Index: https://www.website.com/index.html 
https://www.website.com/uploads/images/1dhe5d5B56.jpg 
and second https://www.website.com/uploads/images/xyz.jpg

=> 
Index: https://www.website.com/index.html 
uploads/images/1dhe5d5B56.jpg 
and second uploads/images/xyz.jpg

答案 1 :(得分:1)

您可以在更新中使用替换。不过要小心!如果只是您问题中的简单替换,那么:

Update [YourTable] 
set [ColumWithUrl] = Replace([ColumWithUrl], 'https://www.website.com/', '')

您还可以指定要用WHERE更新的行。对于该网站的所有网址:

Update [YourTable] 
set [ColumWithUrl] = Replace([ColumWithUrl], 'https://www.website.com/', '')
where [ColumWithUrl] like 'https://www.website.com/%'

或仅适用于图像网址:

Update [YourTable] 
set [ColumWithUrl] = Replace([ColumWithUrl], 'https://www.website.com/', '')
where [ColumWithUrl] like 'https://www.website.com/uploads/images/%'

答案 2 :(得分:0)

从第一个substring()之后的第一个'/'开始

'//'。使用charindex()获取位置。

substring(url,
          charindex('/',
                    url,
                    charindex('//',
                              url)
                    + 2),
          len(url)
          -
          charindex('/',
                    url,
                    charindex('//',
                              url)
                    + 2)
          + 1)

或者使用replace()删除'http://''https://'(如果它们只是在开头,对于合理的URL应该是这样),并删除第一个{{1} }。

'/'

SQL Fiddle


编辑:

嗯,我可能错过了,URL是否可能嵌入其他文本中?这个问题对我来说还不清楚。如果是这样,我的解决方案当然只是部分使用(如果有)。也许可以澄清网址是否是嵌入式的。