2016-10-18 3 views
1

У меня есть таблица, в которой хранятся ссылки на файлы на сервере sql. Мне нужно заменить путь до последней обратной косой черты:TSQL - Заменить строку перед символом

C: \ Users \ APP \ AppData \ Local \ Temp \ Test \ ABC deg.pdf

к, например:

\ приложение \ р \ а deg.pdf

EDIT: в таблице containts много трактов - Мне нужно бежать через весь стол и изменить все тракты.

+0

замена C: \ Users \ APP \ AppData \ Local \ Temp \ test \ with \ app \ pp \. Это то, что вы хотите? – Aditya

+0

Да - правильный. Я изменил вопрос – r0tt

ответ

5

Вы можете использовать:

CHARINDEX('\', REVERSE(@str)) 

, чтобы получить индекс первого обратного слэша начиная с конца.

Использование RIGHT с этим индексом вы можете извлечь строку после последней обратной косой черты и сцепить его на новый путь:

DECLARE @str VARCHAR(50) = 'C:\Users\APP\AppData\Local\Temp\test\abc deg.pdf' 

SELECT '\app\pp' + RIGHT(@str, CHARINDEX('\', REVERSE(@str))) 
+0

Ах да, это меньше, чем ответ, который я дал. –

+0

Как я могу пробежать всю таблицу и менять все шаблоны? – r0tt

+1

@ r0tt Сделать 'UPDATE yourTable SET path = '\ app \ pp' + RIGHT (путь, CHARINDEX ('\', REVERSE (путь)))' –

1

Вот как это можно сделать.

UPDATE TABLE 
SET PATH = REPLACE(PATH, 'C:\Users\APP\AppData\Local\Temp\test', '\app\pp') 
WHERE ... 

Это собирается заменить 'C:\Users\APP\AppData\Local\Temp\test' с '\app\pp'. Или вы можете изменить путь по мере необходимости.

Перед выполнением этого заявления UPDATE необходимо проверить. Я гавань указанные фильтры здесь

2
  1. Обратный входной строки (с помощью REVERSE) и найти индекс первого обратной косой черты (с использованием CHARINDEX).
  2. Поднимите левую часть до этого индекса (используя LEFT) и соедините с обратной стороной вашей заменяющей строки (используя оператор +).
  3. Тогда измените это, чтобы получить окончательный результат.
2

Попробуйте это:

declare @a varchar(max)='C:\Users\APP\AppData\Local\Temp\test\abc deg.pdf' 
select REPLACE(@a,SUBSTRING(@a,1,(LEN(@a)-charindex('\',reverse(@a),1))),'\app\pp') 

Обновление: Для updateall значения столбца таблицы.

select REPLACE([column-name],SUBSTRING([column-name],1,(LEN([column-name])-charindex('\',reverse([column-name]),1))),'\app\pp') 
FROM [Your-table] 
Смежные вопросы