SQL Trim 上一个文件名

SQL Trim on a file name

我正在尝试 trim 一个长文件名,只想获取最后一个正斜杠 (\) 之后的文件名的最后一个字符,我还想消除文件名末尾的 .xlsx

原文:

sasa\sasas\sasas34_IASS.xlsx

预期输出:

1234_IASS

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

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

你可以找到直播example here

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

DECLARE @test varchar(255) = 'sasa\sasas\sasas34_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));

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

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

您的评论表明您的文件路径和文件扩展名都是不变的。如果文件中的字符数也是常量,最简单的解决方案是使用 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
declare @x varchar(100) = 'sasa\sasas\sasas34_IASS.xlsx'

declare @filename varchar(max) = reverse(substring(reverse(@x), 1, charindex('\', reverse(@x))-1 ))
select substring(@filename, 1, charindex('.', @filename)-1)

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

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