Удалить расширения с именем
Я использую SQL.
в таблице tblDemo один из столбцов - "FileName". Каждая строка этого столбца содержит другое имя файла с любым расширением. Для экс. цветок.jpeg", " Бэтмен.двигайся, учись.pdf etc.
пожалуйста, предложите мне запрос, который может помочь мне удалить расширение(и точку) из каждой строки столбца "имена файлов". Так что я мог получить только имя Ex. "цветок", "Бэтмен", "учеба" и т. д.
спасибо
3 ответов
попробуй это:
UPDATE TableName
SET FileName = REVERSE(SUBSTRING(REVERSE(FileName),
CHARINDEX('.', REVERSE(FileName)) + 1, 999))
протестировано на 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