SQL Обрезать по имени файла - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь обрезать длинное имя файла и просто хочу получить последние символы этого имени файла, которые идут после последней следующей записи sh (\), и я также хочу исключить .xlsx в конец имени файла.

Оригинал:

sasa\sasas\sasas\1234_IASS.xlsx

Ожидаемый результат:

1234_IASS

Ответы [ 6 ]

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

Если вы хотите удалить расширения из имени файла, вы можете попробовать это:

UPDATE TableName
SET FileName = REVERSE(SUBSTRING(REVERSE(FileName), 
                       CHARINDEX('.', REVERSE(FileName)) + 1, 999))
1 голос
/ 14 января 2020
declare @x varchar(100) = 'sasa\sasas\sasas\1234_IASS.xlsx'

declare @filename varchar(max) = reverse(substring(reverse(@x), 1, charindex('\', reverse(@x))-1 ))
select substring(@filename, 1, charindex('.', @filename)-1)
1 голос
/ 14 января 2020

В ваших комментариях утверждается, что путь к файлу и расширение файла являются постоянными. Если количество символов в вашем файле также постоянно, самое простое решение - использовать SUBSTRING.

SELECT SUBSTRING(YourColumn, 18, 9)
FROM YourTable

Если число символов меняется, более надежное решение - использовать RIGHT для извлечения имя файла и REPLACE для удаления расширения файла.

SELECT REPLACE(RIGHT(YourColumn, LEN(YourColumn) - 17), '.xlsx', '')
FROM YourTable

Если вам нужно более динамическое c решение, вы можете сначала извлечь имя файла как , показано .

SELECT RIGHT(YourColumn, CHARINDEX('\', REVERSE(YourColumn)) - 1)
FROM YourTable

Затем вы можете объединить это с REPLACE, как и раньше, чтобы удалить расширение.

SELECT REPLACE(RIGHT(YourColumn, CHARINDEX('\', REVERSE(YourColumn)) - 1), '.xlsx', '')
FROM YourTable
1 голос
/ 14 января 2020

Вы говорите, что ваш каталог одинаковый, а расширение всегда одинаковое? Замените [path] именем столбца таблицы:

select replace(replace([path],'sasa\sasas\sasas\',''),'.xlsx','')
1 голос
/ 14 января 2020

Заголовок вашего сообщения вводит в заблуждение, TRIM выполняется в sql-server, чтобы удалить пробелы либо RTRIM или LTRIM, либо их комбинацией; вы пытаетесь получить подстроку из своего Пример строки, я предоставляю решение, которое использует комбинацию REVERSE, SUBSTRING и CHARINDEX, этот ответ хорош, если вам когда-либо понадобится сделать это для разных расширений файлов:

DECLARE @test varchar(255) = 'sasa\sasas\sasas\1234_IASS.xlsx';
DECLARE @lastOccurance INT = CHARINDEX('\', REVERSE(@test)); --Last occurence of the slash character to denote the end of the directory name or what not
DECLARE @lastPeriod INT = CHARINDEX('.', REVERSE(@test)); --This is the last occurence of the period, denoting the file extension
SET @lastOccurance = LEN(@test) + 1 - @lastOccurance;
SET @lastPeriod = LEN(@test) + 1 - @lastPeriod;
SELECT SUBSTRING(@test, @lastOccurance + 1, @lastPeriod - (@lastOccurance + 1));
1 голос
/ 14 января 2020

Вы можете попробовать это, это будет работать, как сказано в комментарии, расширение файла исправлено.

SELECT 
Replace(
    RIGHT('\' + RTRIM('sasa\sasas\sasas\1234_IASS.xlsx'), CHARINDEX('\', REVERSE('\' + RTRIM('sasa\sasas\sasas\1234_IASS.xlsx'))) - 1)
          ,'.xlsx', '') 
as FileName

Вы можете найти живой пример здесь .

...