2015-04-23 2 views
0

Запрос:Замена строки перед последним символом «» в SQL запросе

SELECT filePath FROM Table WHERE filePath IS NOT NULL 

Это будет возвращать что-то вроде \\server\folder1\folder2\filename.tif

Мне нужно запросить его заменить «\\server\folder1\folder2\» с переменной, которая в хранимой процедуре (@Path) и завершите формат файла, например .jpg.

Так что результат будет что-то вроде @Path + «.jpg»

Как бы я идти об этом?

ответ

2

Вы можете использовать комбинацию строковых функций, как REVERSE, SUBSTRING, LEFT и CHARINDEX:

CREATE TABLE YourTable(filePath VARCHAR(2000)) 
INSERT INTO YourTable VALUES('\\server\folder1\folder2\filename.tif'); 

DECLARE @path VARCHAR(2000) = 'path\to\folder\' 
SELECT 
    [File] = REVERSE(LEFT(REVERSE(filePath), CHARINDEX('\', REVERSE(filePath),0) - 1)), 
    [File without ext] = 
     SUBSTRING(
      REVERSE(LEFT(REVERSE(filePath), CHARINDEX('\', REVERSE(filePath), 0) - 1)), 
      0, 
      CHARINDEX(
       '.', 
       REVERSE(LEFT(REVERSE(filePath), CHARINDEX('\', REVERSE(filePath), 0) - 1)), 
       0 
      ) 
     ), 
    [Final String] = 
     @path + 
     SUBSTRING(
      REVERSE(LEFT(REVERSE(filePath), CHARINDEX('\', REVERSE(filePath), 0) - 1)), 
      0, 
      CHARINDEX(
       '.', 
       REVERSE(LEFT(REVERSE(filePath), CHARINDEX('\', REVERSE(filePath), 0) - 1)), 
       0 
      ) 
     ) + 
     '.jpg' 
FROM YourTable 
+0

дорогой бог! это уродливый ха-ха. давая ему попробовать сейчас. –

+0

хороший. это сделало трюк. Спасибо. –

0

Используйте комбинацию REVERSE и CHARINDEX, чтобы найти последний \:

DECLARE @filePath VARCHAR(500) = '\\server\folder1\folder2\filename.tif' 
DECLARE @newPath VARCHAR(500) = '\\server2\newpath\' 

SELECT @newPath + 
    SUBSTRING(@filePath, LEN(@filePath) - CHARINDEX('\', REVERSE(@filePath))+2, LEN(@filePath)) 
Смежные вопросы