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

时间:2013-05-28 02:34:33

标签: 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

现在我想提取文件扩展名,例如.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

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

5 个答案:

答案 0 :(得分:49)

您可以通过以下方式获取扩展程序:

 select reverse(left(reverse(FilePath), charindex('.', reverse(FilePath)) - 1))

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

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

答案 1 :(得分:5)

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

Demo

答案 2 :(得分:2)

在寻找特定扩展,处理有许多点的文本时,以下内容提供了更具体的方法。

with extensionTable ([extension]) AS
(
    SELECT '.pdf'
    UNION ALL SELECT '.txt'
    UNION ALL SELECT '.doc'
    UNION ALL SELECT '.docx'
    UNION ALL SELECT '.xls'
    UNION ALL SELECT '.xlsx'
    UNION ALL SELECT '.ppt'
    UNION ALL SELECT '.pptx'
    UNION ALL SELECT '.zip'
    UNION ALL SELECT '.tar.gz'
    UNION ALL SELECT '.htm'
    UNION ALL SELECT '.html'
)

SELECT T2.[extension]
        , T1.[document_file_name]
FROM tbl T1
OUTER APPLY ( SELECT TOP 1 [extension] 
                FROM extensionTable
                WHERE CHARINDEX([extension], T1.[document_file_name]) > 0
                ORDER BY CHARINDEX([extension], T1.[document_file_name]) DESC, LEN([extension]) DESC
            ) T2 

答案 3 :(得分:0)

您可以通过以下方式获取文件扩展名:

select right('https://google.com/1.png', charindex('.', reverse('https://google.com/1.png') + '.') - 1)

您可以通过以下方式获取文件名:

select right('https://google.com/1.png', charindex('/', reverse('https://google.com/1.png') + '/') - 1)

答案 4 :(得分:-2)

select:invalid + button {
  display: none;
}
select:valid + button {
  display: inline-block;
}