~~ MS ​​SQL Обновите все записи, содержащие строку, и замените строку новой строкой. - PullRequest
0 голосов
/ 14 января 2020

Вот пример таблицы:

enter image description here

Я пытаюсь написать оператор SQL (MS SQL), который будет искать записи, содержащие указанную c строку и затем заменяющую эту строку новой строкой.

В этом примере, скажем, мы хотим видеть все записи, которые:

  1. содержат строку : "~ / main / fruits / яблок"
  2. Заменить "содержит строку" строкой: "~ / main / fruits / stuff"

Система должна редактировать идентификаторы записей: 4, 7 и 8 следующим образом: enter image description here

Моя неудачная попытка заключается в следующем:

UPDATE mydb.dbo.test 
SET [FILE_PATH] = 
(
    SELECT REPLACE('~/main/fruits/apples', 'apples', 'stuff') WHERE ([FILE_PATH] LIKE '~/main/fruits/apples%')
)
WHERE ([FILE_PATH] LIKE '~/main/fruits/apples%');

Проблема с приведенным выше утверждением заключается в том, что для идентификаторов 7 и 8 он исправляет их до одинаковых: '~ / main / fruits / stuff'

1 Ответ

1 голос
/ 14 января 2020

Вы, кажется, хотите:

UPDATE mydb.dbo.test 
    SET FILE_PATH = REPLACE(FILE_PATH, 'apples', 'stuff') 
    WHERE FILE_PATH LIKE '~/main/fruits/apples%';

Лично я бы выровнял шаблон замены с шаблоном like, так что это было больше похоже на:

UPDATE mydb.dbo.test 
    SET FILE_PATH = REPLACE(FILE_PATH, '~/main/fruits/apples', '~/main/fruits/stuff') 
    WHERE FILE_PATH LIKE '~/main/fruits/apples%';

Это предотвращает проблему, если apples встречается в пути более одного раза.

...