Ответ 1
попробуйте этот вариант:
UPDATE TableName
SET FileName = REVERSE(SUBSTRING(REVERSE(FileName),
CHARINDEX('.', REVERSE(FileName)) + 1, 999))
Я использую SQL.
В таблице tblDemo один из столбцов - "Имя_файла". Каждая строка этого столбца содержит другое имя файла с любым расширением. Напр. 'flower.jpeg', 'batman.mov', study.pdf и т.д.
Пожалуйста, предложите мне запрос, который может помочь мне удалить расширение (и точку также) из каждой строки столбца "filenames". Чтобы я мог получить только имя Ex. "цветок", "бэтмен", "учеба" и т.д.
Спасибо
попробуйте этот вариант:
UPDATE TableName
SET FileName = REVERSE(SUBSTRING(REVERSE(FileName),
CHARINDEX('.', REVERSE(FileName)) + 1, 999))
Протестировано на сервере Sql. Это показывает имена файлов без расширения, измените на Update/Set, чтобы изменить данные.
SELECT left([FileName], len([FileName]) - charindex('.', reverse([FileName])))
FROM tblDemo
Отредактировано: изменено с помощью функции "Реверс", поэтому оно также работает, когда поле содержит несколько точек.
Здесь Обновить таблицу:
UPDATE Testing
Set [FileName] = left([FileName],
len([FileName]) - charindex('.', Reverse([FileName])))
Мне нужно было избавиться от всех расширений, а именно:.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
Вот простой оператор выбора, который возвращает желаемые результаты:
SELECT [Filename], SUBSTRING([Filename], 1, charindex('.',[Filename])-1) as [New name] FROM [Table]