Sql 从文件名中删除扩展名

Sql 从文件名中删除扩展名,sql,tsql,Sql,Tsql,我正在使用SQL 在tblDemo表中,其中一列是“FileName”。此列的每一行都包含具有任何扩展名的不同文件名。 例如“flower.jpeg”、“batman.mov”、“study.pdf”等 请向我推荐一个查询,它可以帮助我从“filenames”列的每一行中删除扩展名(以及点)。这样我就只能拿到名字,比如“花”、“蝙蝠侠”、“书房”等等 感谢您在Sql Server上测试。显示不带扩展名的文件名,更改为Update/Set以修改数据 SELECT left([FileName],

我正在使用SQL

在tblDemo表中,其中一列是“FileName”。此列的每一行都包含具有任何扩展名的不同文件名。 例如“flower.jpeg”、“batman.mov”、“study.pdf”等

请向我推荐一个查询,它可以帮助我从“filenames”列的每一行中删除扩展名(以及点)。这样我就只能拿到名字,比如“花”、“蝙蝠侠”、“书房”等等


感谢您在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])))
试试这个:

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

我需要去掉所有扩展,例如:.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语句,它返回所需的结果:

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

在MySQL中,这对我来说很有用

set@file='test1.test2.test3.docx';
选择子字符串(@file,1,(长度(@file)-(长度(子字符串索引(@file,,-1))+1))作为“名称文件”,
子字符串_索引(@file,'.',-1)作为“扩展名”;

这将有助于-Ben/Jcis-在上述查询中修改什么,以考虑类似的情况:-“this.Is.My.Filename.Txt”@Jcis-非常感谢您的朋友。刚刚接受了约翰的回答,因为他首先回答了多点问题。你的答案绝对正确。你是冠军。成功了。它确实会从文件名中删除扩展名,即使文件名中有多个“点”。我会编辑一下你的帖子,以便将来对其他人有所帮助CHARINDEX@JohnWoo999是怎么回事?