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

标签 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() 函数。如何简单地剪切子字符串?

最佳答案

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

 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

关于sql - T-SQL 从列中获取文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16783026/

相关文章:

.net - 始终在 DAL 基类中使用 TransactionScope 是一个好习惯吗?

sql-server - 无法在 SQL Server Management Studio 中编辑 Azure 数据库的行

mysql - 在存储过程中传递参数

mysql - 如何将数据库中两个表中的连接条目显示为 HTML 表?

mysql - 跨两列的唯一约束

MySQL查询以查找设备最后一个条目的位置

sql-server - 如何在 HQL 中使用 Datediff()

sql - INSERT 语句与 FOREIGN KEY 约束冲突 - SQL Server

java - 考虑在您的配置中定义一个名为 'entityManagerFactory' 的 bean。升级到 spring boot 2 后的 mssqlserver

java - SQL 准备语句抛出有关语法的错误