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 的标题具有误导性,TRIM
在 sql-server
中执行以通过 RTRIM
或 LTRIM
或以下组合删除空格这两个,你想要做的是从你的示例字符串中获取一个子字符串,我提供了一个使用 REVERSE
、SUBSTRING
和 CHARINDEX
组合的解决方案,这个答案是如果您需要对不同的文件扩展名执行此操作,则非常有用:
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))
我正在尝试 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 的标题具有误导性,TRIM
在 sql-server
中执行以通过 RTRIM
或 LTRIM
或以下组合删除空格这两个,你想要做的是从你的示例字符串中获取一个子字符串,我提供了一个使用 REVERSE
、SUBSTRING
和 CHARINDEX
组合的解决方案,这个答案是如果您需要对不同的文件扩展名执行此操作,则非常有用:
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))