14

我正在使用 SQL。

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

请在查询中向我提出建议,该查询可以帮助我从“文件名”列的每一行中删除扩展名(以及点)。这样我就可以只获取名称 Ex。“花”、“蝙蝠侠”、“学习”等。

谢谢

4

5 回答 5

42

试试这个:

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

查看 DEMO @ SQLFiddle.com

于 2012-06-28T09:47:33.837 回答
13

在 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])))
于 2012-06-28T09:30:56.073 回答
3

我需要摆脱所有扩展名,即:.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
于 2018-08-20T18:45:31.980 回答
0

这是一个返回所需结果的简单选择语句:

 SELECT  [Filename], SUBSTRING([Filename], 1, charindex('.',[Filename])-1) as [New name] FROM [Table]
于 2018-12-12T20:49:06.187 回答
0

在 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';
于 2021-03-30T19:03:40.170 回答