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

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

в таблице tblDemo один из столбцов - "FileName". Каждая строка этого столбца содержит другое имя файла с любым расширением. Для экс. цветок.jpeg", " Бэтмен.двигайся, учись.pdf etc.

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

спасибо

3 ответов


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

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

просмотр для демо @ SQLFiddle.com


протестировано на Sql Server. Это показывает имена файлов без расширения, изменение на обновление / набор для изменения данных.

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

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

на Обновление Таблицы версия:
UPDATE Testing 
   Set [FileName] = left([FileName], 
                         len([FileName]) - charindex('.', Reverse([FileName])))

мне нужно было избавиться от всех расширений, i.e: .смола.GZ или .формат txt.из. Это то, что сработало для меня в 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