我正在使用 SQL。
在表 tblDemo 中,其中一列是“文件名”。此列的每一行都包含具有任何扩展名的不同文件名。例如。'flower.jpeg'、'batman.mov'、study.pdf 等。
请在查询中向我提出建议,该查询可以帮助我从“文件名”列的每一行中删除扩展名(以及点)。这样我就可以只获取名称 Ex。“花”、“蝙蝠侠”、“学习”等。
谢谢
试试这个:
UPDATE TableName
SET FileName = REVERSE(SUBSTRING(REVERSE(FileName),
CHARINDEX('.', REVERSE(FileName)) + 1, LEN(FileName))
在 Sql Server 上测试。这显示没有扩展名的文件名,更改为 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]
在 MySQL 中,这对我有用。
set @file = 'test1.test2.test3.docx';
SELECT substring(@file, 1, (length(@file) - (length(substring_index(@file, '.', -1)) + 1))) as 'name_file',
substring_index(@file, '.', -1) as 'extension';