【问题标题】:SQL Trim on a file name对文件名进行 SQL 修剪
【发布时间】:2020-05-01 12:18:06
【问题描述】:

我正在尝试修剪一个长文件名,只想获取该文件名的最后一个字符,即最后一个正斜杠 (\) 之后,我还想消除末尾的 .xlsx文件名也是如此。

原文:

sasa\sasas\sasas\1234_IASS.xlsx

预期输出:

1234_IASS

【问题讨论】:

  • @GordonLinoff 只是想得到最后一个 \ 之后的输出并从最后取出 .xlsx 部分
  • 所有文件名都以 .xlsx 结尾吗?是否有任何文件具有不同的扩展名,是否有任何扩展名是三个字符而不是四个?
  • @DerrickMoeller 是的,所有文件名都以相同的扩展名和相同的字符数结尾
  • 这些文件路径是否存储在表中?
  • @gbeaven 是的,但文件名不同,文件路径保持不变

标签: sql sql-server trim


【解决方案1】:

您的 cmets 声明您的文件路径和文件扩展名都是不变的。如果文件中的字符数也是恒定的,最简单的解决方案是使用SUBSTRING

SELECT SUBSTRING(YourColumn, 18, 9)
FROM YourTable

如果字符数发生变化,更稳健的解决方案是使用RIGHT 提取文件名并使用REPLACE 删除文件扩展名。

SELECT REPLACE(RIGHT(YourColumn, LEN(YourColumn) - 17), '.xlsx', '')
FROM YourTable

如果需要更动态的解决方案,可以先将文件名解压为shown

SELECT RIGHT(YourColumn, CHARINDEX('\', REVERSE(YourColumn)) - 1)
FROM YourTable

然后,您可以像以前一样将其与 REPLACE 组合以删除扩展名。

SELECT REPLACE(RIGHT(YourColumn, CHARINDEX('\', REVERSE(YourColumn)) - 1), '.xlsx', '')
FROM YourTable

【讨论】:

    【解决方案2】:

    你可以试试这个,它会像评论中所说的那样工作,文件扩展名是固定的。

    SELECT 
    Replace(
        RIGHT('\' + RTRIM('sasa\sasas\sasas\1234_IASS.xlsx'), CHARINDEX('\', REVERSE('\' + RTRIM('sasa\sasas\sasas\1234_IASS.xlsx'))) - 1)
              ,'.xlsx', '') 
    as FileName
    

    你可以找到直播example here

    【讨论】:

    • 嗨,我只是以这个文件名为例,但是从表中提取数据时,所有文件名都不同。那么我将如何使用它呢?
    • 通过这种方式,它将所有文件名替换为名称 1234_IASS
    • @Minhal 同样适用于示例:sa sa\s asas\sasa s\1234_IASS.xlsx
    • @Minhal 将该字段作为文件路径传递,不要像这个答案建议的那样将其硬编码。
    • @Minhal 感谢您告诉我并接受答案。
    【解决方案3】:

    你说你的目录是一样的,扩展名总是一样的?将[path] 替换为您的表列名称:

    select replace(replace([path],'sasa\sasas\sasas\',''),'.xlsx','')
    

    【讨论】:

      【解决方案4】:
      declare @x varchar(100) = 'sasa\sasas\sasas\1234_IASS.xlsx'
      
      declare @filename varchar(max) = reverse(substring(reverse(@x), 1, charindex('\', reverse(@x))-1 ))
      select substring(@filename, 1, charindex('.', @filename)-1)
      

      【讨论】:

        【解决方案5】:

        您的帖子标题具有误导性,TRIMsql-server 中执行以通过RTRIMLTRIM 或两者的组合删除空格,您要做的是从您的示例字符串,我提供了一个使用REVERSESUBSTRINGCHARINDEX 组合的解决方案,如果您需要为不同的文件扩展名执行此操作,此答案非常有用:

        DECLARE @test varchar(255) = 'sasa\sasas\sasas\1234_IASS.xlsx';
        DECLARE @lastOccurance INT = CHARINDEX('\', REVERSE(@test)); --Last occurence of the slash character to denote the end of the directory name or what not
        DECLARE @lastPeriod INT = CHARINDEX('.', REVERSE(@test)); --This is the last occurence of the period, denoting the file extension
        SET @lastOccurance = LEN(@test) + 1 - @lastOccurance;
        SET @lastPeriod = LEN(@test) + 1 - @lastPeriod;
        SELECT SUBSTRING(@test, @lastOccurance + 1, @lastPeriod - (@lastOccurance + 1));
        

        【讨论】:

          【解决方案6】:

          如果你想从文件名中删除扩展名,那么你可以试试这个:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-16
            • 2013-04-10
            • 1970-01-01
            • 2018-06-27
            • 1970-01-01
            相关资源
            最近更新 更多