T-SQL从列中获取文件扩展名

Edi*_*ang 15 sql sql-server

我有一个包含整个文件名的列的表,数据如下所示:

FilePath                       FileSize
------------------------------ --------
dsch2_chs_wyj.rar              694KB
AllInOneHash.rar               19KB
FilePropertyModifier.rar       12KB
jquery_1_7_api_chm_chs.rar     285KB
startupmgr.rar                 38KB
JQueryTableExample_Edi.rar     33KB
hdpartioncalc_csharp.rar       49KB
XMLMenuTest.zip                3KB
Run Code Online (Sandbox Code Playgroud)

现在我想提取文件扩展名,比如.rar插入到新表中.

INSERT INTO Attachment
  (
    Id,
    [FileName],
    ExtensionName,
    StoredPath,
    CreateOn,
    UploaderIP,
    DataBinary
  )
SELECT ba.Id,
       ba.Title,
       '{Extension Name}',
       ba.FilePath,
       GETDATE(),
       NULL,
       NULL
FROM   BlogAttachment ba
Run Code Online (Sandbox Code Playgroud)

但是T-SQL没有LastIndexOf()功能.如何以简单的方式切割子串?

Gor*_*off 54

您可以通过以下方式获得扩展:

 select reverse(left(reverse(FilePath), charindex('.', reverse(FilePath)) - 1))
Run Code Online (Sandbox Code Playgroud)

但是,我建议您首先检查'.'名称中是否有:

 select (case when FilePath like '%.%'
              then reverse(left(reverse(FilePath), charindex('.', reverse(FilePath)) - 1))
              else ''
         end) as Extension
Run Code Online (Sandbox Code Playgroud)


Ker*_*mit 6

SELECT CASE 
         WHEN filepath LIKE '%.%' THEN RIGHT(filepath, Len(filepath) - 
                                                       Charindex('.', filepath)) 
         ELSE filepath 
       END FilePath 
FROM   tbl1 
Run Code Online (Sandbox Code Playgroud)

演示

  • 不处理具有多个"."的文件.在名字中. (7认同)
  • 这个不处理所有情况.Gordon Linoff的回答对我来说效果更好 (3认同)
  • 不属于要求的一部分. (2认同)
  • 这是一个默认的要求。 (2认同)