Получить текст после последней обратной косой черты с помощью преобразования производного столбца служб SSIS

Использование SQL Server 2014.

У меня есть поле, содержащее строку, содержащую полный путь к файлу, т.е.

\\Server\Folder1\Folder2\Folder3\File21.csv

Мне нужно только то, что после последней обратной косой черты, т.е.

File21.csv

Итак, в мире SQL я бы использовал:

Select RIGHT([FileName],charindex('\',reverse([FileName]),1)-1) as FileNameNew from mytable

Однако как это сделать в производном столбце в службах SSIS? Нет CHARINDEX, поэтому вам нужно использовать FINDSTRING. Это мое выражение:

RIGHT( [FileName] , FINDSTRING('\', REVERSE( [FileName] ) ,1)  -1)

Но он не работает, он продолжает говорить, что одиночная кавычка не ожидалась. Я также пробовал двойные кавычки безрезультатно.


person Michael    schedule 19.02.2020    source источник
comment
У меня нет установки SSDT, чтобы проверить это, но обратную косую черту в выражениях SSIS обычно нужно экранировать, конечно, обратной косой чертой. Таким образом, вы можете добиться чего-то, используя FINDSTRING('\\'.... В любом случае стоит попробовать.   -  person Eric Brandt    schedule 19.02.2020
comment
@EricBrandt принял это, но затем произошел сбой пакета: [Производный столбец [2]] Ошибка: код ошибки SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. Произошел сбой производного столбца из-за кода ошибки 0xC0049067.   -  person Michael    schedule 19.02.2020
comment
Новые ошибки прогресс! Однако я ухожу, мне не хватает редактора, с которым можно было бы поиграть.   -  person Eric Brandt    schedule 19.02.2020
comment
ха-ха - думаю, я просто вернусь к обновлению SQL после задачи импорта. Просто пытался уместить все это в ДПФ.   -  person Michael    schedule 19.02.2020
comment
@EricBrandt Самое простое решение - использовать TOKEN() и TOKENCOUNT(). Так как они разработаны для решения подобных случаев.   -  person Hadi    schedule 11.03.2020


Ответы (2)


Я думаю, что у вас есть ваши параметры назад. FINDSTRING() сначала хочет то, что вы ищете, а затем то, что вы ищете. И вам понадобятся двойные кавычки и экранированная обратная косая черта. Это должно работать:

RIGHT( [FileName] , FINDSTRING(REVERSE( [FileName] ), "\\" ,1)  -1)
person digital.aaron    schedule 19.02.2020

Даже если это можно сделать с помощью функций RIGHT() или SUBSTRING(). Я предпочитаю использовать для этого функции TOKEN и TOKENCOUNT():

TOKEN([File Name],"\\",TOKENCOUNT([File Name],"\\"))

Пример:

TOKEN("\\\\Server\\Folder1\\Folder2\\Folder3\\File21.csv","\\",TOKENCOUNT("\\\\Server\\Folder1\\Folder2\\Folder3\\File21.csv","\\"))

Результат:

Файл21.csv

person Hadi    schedule 10.03.2020