Подтвердить что ты не робот

Удалить расширения из имени файла

Я использую SQL.

В таблице tblDemo один из столбцов - "Имя_файла". Каждая строка этого столбца содержит другое имя файла с любым расширением. Напр. 'flower.jpeg', 'batman.mov', study.pdf и т.д.

Пожалуйста, предложите мне запрос, который может помочь мне удалить расширение (и точку также) из каждой строки столбца "filenames". Чтобы я мог получить только имя Ex. "цветок", "бэтмен", "учеба" и т.д.

Спасибо

4b9b3361

Ответ 1

попробуйте этот вариант:

UPDATE TableName
SET FileName = REVERSE(SUBSTRING(REVERSE(FileName), 
                       CHARINDEX('.', REVERSE(FileName)) + 1, 999))

Просмотр для DEMO @SQLFiddle.com

Ответ 2

Протестировано на сервере Sql. Это показывает имена файлов без расширения, измените на Update/Set, чтобы изменить данные.

SELECT left([FileName], len([FileName]) - charindex('.', reverse([FileName]))) 
  FROM tblDemo

Отредактировано: изменено с помощью функции "Реверс", поэтому оно также работает, когда поле содержит несколько точек.

Здесь Обновить таблицу:

UPDATE Testing 
   Set [FileName] = left([FileName], 
                         len([FileName]) - charindex('.', Reverse([FileName])))

Ответ 3

Мне нужно было избавиться от всех расширений, а именно:.tar.gz или.txt.out. Вот что сработало для меня в SQL Server:

CREATE FUNCTION RemoveFileExt
(
    @fullpath nvarchar(500)
)
RETURNS nvarchar(500)
AS
BEGIN
    IF(CHARINDEX('.', @fullpath) > 0)
    BEGIN
       SELECT @fullpath = SUBSTRING(@fullpath, 1, CHARINDEX('.', @fullpath)-1)
    END
    RETURN @fullpath
END;

CREATE FUNCTION RemoveFileExtAll
(
    @fullpath nvarchar(500)
)
RETURNS nvarchar(500)
AS
BEGIN
    IF(CHARINDEX('.', @fullpath) > 0)
    BEGIN
        SELECT @fullpath = dbo.RemoveFileExt(@fullpath)
    END
    RETURN @fullpath
END;

select dbo.RemoveFileExtAll('test.tar.gz');

OUTPUT> test

В качестве бонуса, чтобы получить только базовое имя из полного пути в Linux или Windows:

CREATE FUNCTION GetBaseName
(
    @fullpath nvarchar(500)
)
RETURNS nvarchar(500)
AS
BEGIN
    IF(CHARINDEX('/', @fullpath) > 0)
    BEGIN
       SELECT @fullpath = RIGHT(@fullpath, CHARINDEX('/', REVERSE(@fullpath)) -1)
    END
    IF(CHARINDEX('\', @fullpath) > 0)
    BEGIN
       SELECT @fullpath = RIGHT(@fullpath, CHARINDEX('\', REVERSE(@fullpath)) -1)
    END
    RETURN @fullpath
END;

select dbo.GetBaseName('/media/drive_D/test.tar.gz');

OUTPUT> test.tar.gz

select dbo.GetBaseName('D:/media/test.tar.gz');

OUTPUT> test.tar.gz

select dbo.GetBaseName('//network/media/test.tar.gz');

OUTPUT> test.tar.gz

Ответ 4

Вот простой оператор выбора, который возвращает желаемые результаты:

 SELECT  [Filename], SUBSTRING([Filename], 1, charindex('.',[Filename])-1) as [New name] FROM [Table]