2012-06-28 366 views
8

我正在使用SQL。从文件名中删除扩展名

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

请建议我一个查询,这可以帮助我从'文件名'列的每一行中删除扩展名(以及点) 。所以我只能拿到名字Ex。 '花', '蝙蝠侠', '学习' 等

感谢

+2

这将帮助 - http://stackoverflow.com/questions/1024978/find-index-of-a-subs-string-using-t-sql – Kshitij

回答

26

试试这个:

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

View For a DEMO @ SQLFiddle.com

+0

你是冠军。有效。它确实从fileName中删除了扩展名,即使文件名中有多个'dot'也是如此。我会稍微编辑一下你的帖子,以便将来可以帮助其他人。 – Kings

+3

对于MySQL用户使用LOCATE而不是CHARINDEX –

+0

链接无法正常工作。 – thecoolmacdude

6

测试的SQL Server上。这显示没有扩展名的文件名,更改为更新/设置以修改数据。

SELECT left([FileName], len([FileName]) - charindex('.', reverse([FileName]))) 
    FROM tblDemo 

编辑:使用反向修正,所以当字段包含多个点它也适用。

这里更新表版本:

UPDATE Testing 
    Set [FileName] = left([FileName], 
         len([FileName]) - charindex('.', Reverse([FileName]))) 
+0

在c中不起作用ase“This.Is.My.Filename.Txt”。 – Ben

+0

Ben/Jcis - 在提及的查询中修改什么,以考虑类似的情况: - 'This.Is.My.Filename.Txt' – Kings

+0

已更新,以处理文件名中的多个点 – Jcis