SQL: Есть ли способ сделать массовую замену строк в SQL? - PullRequest
0 голосов
/ 27 августа 2018

У меня есть некоторые данные, которые нужно переписать в моей БД. Я пытаюсь превратить полный URL в относительный URL. Так что в основном мне нужно пойти и изменить все случаи "https://www.website.com/uploads/images/1dhe5d5B56.jpg" больше похоже на «uploads / images / 1dhe5d5B56.jpg».

Я знаю, что есть replace (), но не уверен, смогу ли я использовать это с обновлением вместо select. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Вы можете использовать заменить в обновлении. Но будь осторожен! Если это простая замена, как в вашем вопросе, то:

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

Вы также можете указать, какие строки обновлять с помощью WHERE. Для всех URL с этим сайтом:

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

Или только для URL изображений:

Update [YourTable] 
set [ColumWithUrl] = Replace([ColumWithUrl], 'https://www.website.com/', '')
where [ColumWithUrl] like 'https://www.website.com/uploads/images/%'
0 голосов
/ 28 августа 2018

substring() с первого '/' после первого '//'. Используйте charindex(), чтобы получить их позиции.

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

Или используйте replace(), чтобы удалить 'http://' и 'https://' (если они только в начале, что должно быть в случае с вменяемыми URL-адресами) и перейдите к первому '/'.

substring(replace(replace(url,
                          'http://',
                          ''),
                  'https://',
                  ''),
          charindex('/',
                    replace(replace(url,
                                    'http://',
                                    ''),
                    'https://',
                    '')),
          len(replace(replace(url,
                              'http://',
                              ''),
                      'https://',
                      ''))
          -
          charindex('/',
                    replace(replace(url,
                                    'http://',
                                    ''),
                    'https://',
                    ''))
          +
          1)

SQL Fiddle


Edit:

Хм, возможно, я упустил, что URL-адреса могут быть встроены в другой текст? Это не было ясно из вопроса. Если это так, то мое решение, конечно, только для частичного использования, если оно есть. Может быть, уточнить, являются ли URL-адреса встроенными или нет.

0 голосов
/ 27 августа 2018

Да, вы можете использовать REPLACE с UPDATE:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...